#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();
}
CiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBsb25nIGxvbmcgTWF4TiA9IDFlNSArIDU7CmNvbnN0IGxvbmcgbG9uZyBNYXhWYWwgPSAxZTE4OwoKbG9uZyBsb25nIG4sbSxhLGI7Cgp2ZWN0b3I8bG9uZyBsb25nPiBhcnJbTWF4Tl07Cgpib29sIENoZWNrX0FbMl1bTWF4Tl07CmJvb2wgQ2hlY2tfQlsyXVtNYXhOXTsKCmxvbmcgbG9uZyBNaW5fU3VtQVsyXVtNYXhOXTsKbG9uZyBsb25nIE1pbl9TdW1CWzJdW01heE5dOwoKdm9pZCBiZnMobG9uZyBsb25nIHgsIHZlY3Rvcjxsb25nIGxvbmc+IGFycltdLCBib29sIENoZWNrWzJdW01heE5dLCBsb25nIGxvbmcgTWluX1N1bVsyXVtNYXhOXSkKewogICAgcXVldWU8cGFpcjxsb25nIGxvbmcsbG9uZyBsb25nPj4gcXU7CgogICAgcXUucHVzaCh7eCwwfSk7CgogICAgQ2hlY2tbMF1beF09dHJ1ZTsKICAgIE1pbl9TdW1bMF1beF09MDsKCiAgICB3aGlsZSghcXUuZW1wdHkoKSkKICAgIHsKICAgICAgICBsb25nIGxvbmcgdT1xdS5mcm9udCgpLmZpcnN0OwogICAgICAgIGxvbmcgbG9uZyBwYXJpdHk9cXUuZnJvbnQoKS5zZWNvbmQ7CiAgICAgICAgcXUucG9wKCk7CgogICAgICAgIGxvbmcgbG9uZyBuZXdfZGlzPU1pbl9TdW1bcGFyaXR5XVt1XSsxOwogICAgICAgIGxvbmcgbG9uZyBuZXdfcGFyaXR5PTEtcGFyaXR5OwoKICAgICAgICBmb3IobG9uZyBsb25nIHY6YXJyW3VdKQogICAgICAgIHsKICAgICAgICAgICAgaWYoIUNoZWNrW25ld19wYXJpdHldW3ZdKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDaGVja1tuZXdfcGFyaXR5XVt2XT10cnVlOwogICAgICAgICAgICAgICAgTWluX1N1bVtuZXdfcGFyaXR5XVt2XT1uZXdfZGlzOwoKICAgICAgICAgICAgICAgIHF1LnB1c2goe3YsbmV3X3Bhcml0eX0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIGlucHV0KCkKewogICAgY2luPj5uPj5tOwogICAgY2luPj5hPj5iOwoKICAgIGZvcihsb25nIGxvbmcgaT0xO2k8PW07aSsrKQogICAgewogICAgICAgIGxvbmcgbG9uZyB1LHY7CgogICAgICAgIGNpbj4+dT4+djsKCiAgICAgICAgYXJyW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICBhcnJbdl0ucHVzaF9iYWNrKHUpOwogICAgfQp9Cgp2b2lkIHNvbHZlKCkKewogICAgZm9yKGxvbmcgbG9uZyBpPTE7aTw9bjtpKyspCiAgICB7CiAgICAgICAgZm9yKGxvbmcgbG9uZyBqPTA7ajw9MTtqKyspCiAgICAgICAgewogICAgICAgICAgICBDaGVja19BW2pdW2ldPWZhbHNlOwogICAgICAgICAgICBDaGVja19CW2pdW2ldPWZhbHNlOwoKICAgICAgICAgICAgTWluX1N1bUFbal1baV09TWF4VmFsOwogICAgICAgICAgICBNaW5fU3VtQltqXVtpXT1NYXhWYWw7CiAgICAgICAgfQogICAgfQoKICAgIGJmcyhhLGFycixDaGVja19BLE1pbl9TdW1BKTsKICAgIGJmcyhiLGFycixDaGVja19CLE1pbl9TdW1CKTsKCiAgICBsb25nIGxvbmcgYW5zPU1heFZhbDsKCiAgICBmb3IobG9uZyBsb25nIGk9MTtpPD1uO2krKykKICAgIHsKICAgICAgICBmb3IobG9uZyBsb25nIGo9MDtqPD0xO2orKykKICAgICAgICB7CiAgICAgICAgICAgIGlmKENoZWNrX0Fbal1baV0gJiYgQ2hlY2tfQltqXVtpXSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYW5zPW1pbihhbnMsbWF4KE1pbl9TdW1BW2pdW2ldLE1pbl9TdW1CW2pdW2ldKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaWYoYW5zPT1NYXhWYWwpCiAgICB7CiAgICAgICAgY291dDw8LTE7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgY291dDw8YW5zOwogICAgfQp9CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwoKICAgIGlucHV0KCk7CiAgICBzb2x2ZSgpOwp9Cg==