#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 idx=0;idxP[u])uf.unite(u,v); int mx=uf.mx[uf.find(u)]; mx++; if(u==S)mx=0; uf.mx[uf.find(u)]=mx; if(idx+1P[id[idx+1]]) { for(int i=idx;i>=0&&P[id[idx]]==P[id[i]];i--) { for(int v:G[id[i]])if(P[v]==P[id[i]])uf.unite(v,id[i]); } } } cout<