#include #include #include using namespace std; #include struct UF{ int n; vectorparent,rank,mx; UF(int n_=0):n(n_),parent(n_),rank(n_,1),mx(n_,(int)-1e9) { for(int i=0;iG[1<<17]; int dp[1<<17]; int id[1<<17]; main() { cin>>N>>M>>S>>T; S--,T--; for(int i=0;i>P[i]; for(int i=0;i>a>>b; a--,b--; G[a].push_back(b); G[b].push_back(a); } for(int i=0;iP[j];}); UF uf(N); for(int i=0;iP[u])mx=max(mx,uf.mx[uf.find(v)]); mx++; if(u==S)mx=0; uf.mx[uf.find(u)]=mx; } for(int k=i;k=P[u])uf.unite(u,v); } i=j; } cout<