#include using namespace std; using ll=long long; #include using namespace atcoder; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int N,M,S,T; cin>>N>>M>>S>>T; S--;T--; vector> G(N); vector C(N,0); set> EF; for(int i=0;i>u>>v; u--;v--; if(u>v)swap(u,v); G[u].push_back(v); G[v].push_back(u); EF.insert({u,v}); C[u]++; C[v]++; } queue Q; for(int i=0;i D(N,INF); vector R(N,-1); D[S]=0; queue que; que.push(0); vector seen(N,0); while(!que.empty()){ int n=que.front(); que.pop(); if(seen[n])continue; seen[n]=1; for(auto v:G[n]){ if(seen[v])continue; if(D[v]<=D[n]+1)continue; D[v]=D[n]+1; R[v]=n; que.push(v); } } if(D[T]>1e7)cout<<-1<<"\n"; else{ int an=0; while(T!=S){ int Y=R[T]; if(EF.count({min(Y,T),max(Y,T)}))an++; T=Y; } cout<