#include<bits/stdc++.h>
using namespace std;
const long long MaxN = 1e5 + 5;
const long long MaxVal = 1e18;
long long n,m,a,b;
vector<long long> arr[MaxN];
bool Check_A[2][MaxN];
bool Check_B[2][MaxN];
long long Min_SumA[2][MaxN];
long long Min_SumB[2][MaxN];
void bfs(long long x, vector<long long> arr[], bool Check[2][MaxN], long long Min_Sum[2][MaxN])
{
queue<pair<long long,long long>> qu;
qu.push({x,0});
Check[0][x]=true;
Min_Sum[0][x]=0;
while(!qu.empty())
{
long long u=qu.front().first;
long long parity=qu.front().second;
qu.pop();
long long new_dis=Min_Sum[parity][u]+1;
long long new_parity=1-parity;
for(long long v:arr[u])
{
if(!Check[new_parity][v])
{
Check[new_parity][v]=true;
Min_Sum[new_parity][v]=new_dis;
qu.push({v,new_parity});
}
}
}
}
void input()
{
cin>>n>>m;
cin>>a>>b;
for(long long i=1;i<=m;i++)
{
long long u,v;
cin>>u>>v;
arr[u].push_back(v);
arr[v].push_back(u);
}
}
void solve()
{
for(long long i=1;i<=n;i++)
{
for(long long j=0;j<=1;j++)
{
Check_A[j][i]=false;
Check_B[j][i]=false;
Min_SumA[j][i]=MaxVal;
Min_SumB[j][i]=MaxVal;
}
}
bfs(a,arr,Check_A,Min_SumA);
bfs(b,arr,Check_B,Min_SumB);
long long ans=MaxVal;
for(long long i=1;i<=n;i++)
{
for(long long j=0;j<=1;j++)
{
if(Check_A[j][i] && Check_B[j][i])
{
ans=min(ans,max(Min_SumA[j][i],Min_SumB[j][i]));
}
}
}
if(ans==MaxVal)
{
cout<<-1;
}
else
{
cout<<ans;
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
input();
solve();
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGxvbmcgbG9uZyBNYXhOID0gMWU1ICsgNTsKY29uc3QgbG9uZyBsb25nIE1heFZhbCA9IDFlMTg7Cgpsb25nIGxvbmcgbixtLGEsYjsKCnZlY3Rvcjxsb25nIGxvbmc+IGFycltNYXhOXTsKCmJvb2wgQ2hlY2tfQVsyXVtNYXhOXTsKYm9vbCBDaGVja19CWzJdW01heE5dOwoKbG9uZyBsb25nIE1pbl9TdW1BWzJdW01heE5dOwpsb25nIGxvbmcgTWluX1N1bUJbMl1bTWF4Tl07Cgp2b2lkIGJmcyhsb25nIGxvbmcgeCwgdmVjdG9yPGxvbmcgbG9uZz4gYXJyW10sIGJvb2wgQ2hlY2tbMl1bTWF4Tl0sIGxvbmcgbG9uZyBNaW5fU3VtWzJdW01heE5dKQp7CiAgICBxdWV1ZTxwYWlyPGxvbmcgbG9uZyxsb25nIGxvbmc+PiBxdTsKCiAgICBxdS5wdXNoKHt4LDB9KTsKCiAgICBDaGVja1swXVt4XT10cnVlOwogICAgTWluX1N1bVswXVt4XT0wOwoKICAgIHdoaWxlKCFxdS5lbXB0eSgpKQogICAgewogICAgICAgIGxvbmcgbG9uZyB1PXF1LmZyb250KCkuZmlyc3Q7CiAgICAgICAgbG9uZyBsb25nIHBhcml0eT1xdS5mcm9udCgpLnNlY29uZDsKICAgICAgICBxdS5wb3AoKTsKCiAgICAgICAgbG9uZyBsb25nIG5ld19kaXM9TWluX1N1bVtwYXJpdHldW3VdKzE7CiAgICAgICAgbG9uZyBsb25nIG5ld19wYXJpdHk9MS1wYXJpdHk7CgogICAgICAgIGZvcihsb25nIGxvbmcgdjphcnJbdV0pCiAgICAgICAgewogICAgICAgICAgICBpZighQ2hlY2tbbmV3X3Bhcml0eV1bdl0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENoZWNrW25ld19wYXJpdHldW3ZdPXRydWU7CiAgICAgICAgICAgICAgICBNaW5fU3VtW25ld19wYXJpdHldW3ZdPW5ld19kaXM7CgogICAgICAgICAgICAgICAgcXUucHVzaCh7dixuZXdfcGFyaXR5fSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCnZvaWQgaW5wdXQoKQp7CiAgICBjaW4+Pm4+Pm07CiAgICBjaW4+PmE+PmI7CgogICAgZm9yKGxvbmcgbG9uZyBpPTE7aTw9bTtpKyspCiAgICB7CiAgICAgICAgbG9uZyBsb25nIHUsdjsKCiAgICAgICAgY2luPj51Pj52OwoKICAgICAgICBhcnJbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIGFyclt2XS5wdXNoX2JhY2sodSk7CiAgICB9Cn0KCnZvaWQgc29sdmUoKQp7CiAgICBmb3IobG9uZyBsb25nIGk9MTtpPD1uO2krKykKICAgIHsKICAgICAgICBmb3IobG9uZyBsb25nIGo9MDtqPD0xO2orKykKICAgICAgICB7CiAgICAgICAgICAgIENoZWNrX0Fbal1baV09ZmFsc2U7CiAgICAgICAgICAgIENoZWNrX0Jbal1baV09ZmFsc2U7CgogICAgICAgICAgICBNaW5fU3VtQVtqXVtpXT1NYXhWYWw7CiAgICAgICAgICAgIE1pbl9TdW1CW2pdW2ldPU1heFZhbDsKICAgICAgICB9CiAgICB9CgogICAgYmZzKGEsYXJyLENoZWNrX0EsTWluX1N1bUEpOwogICAgYmZzKGIsYXJyLENoZWNrX0IsTWluX1N1bUIpOwoKICAgIGxvbmcgbG9uZyBhbnM9TWF4VmFsOwoKICAgIGZvcihsb25nIGxvbmcgaT0xO2k8PW47aSsrKQogICAgewogICAgICAgIGZvcihsb25nIGxvbmcgaj0wO2o8PTE7aisrKQogICAgICAgIHsKICAgICAgICAgICAgaWYoQ2hlY2tfQVtqXVtpXSAmJiBDaGVja19CW2pdW2ldKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhbnM9bWluKGFucyxtYXgoTWluX1N1bUFbal1baV0sTWluX1N1bUJbal1baV0pKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZihhbnM9PU1heFZhbCkKICAgIHsKICAgICAgICBjb3V0PDwtMTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBjb3V0PDxhbnM7CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CgogICAgaW5wdXQoKTsKICAgIHNvbHZlKCk7Cn0=