#include using namespace std; struct tree{ vector parent; int numberOfNodes=0; int root; tree(int N,vector& a,int k=0){ parent=a; numberOfNodes=N; root=k; } tree(int N,set>& edges,int k=0){ root=k; numberOfNodes=N; parent.resize(N); fill(parent.begin(),parent.end(),-1); map> connected; for(vector v:edges){ connected[v[0]].insert(v[1]); connected[v[1]].insert(v[0]); } queue q; q.push(k); while(!q.empty()){ for(int i:connected[q.front()]){ if(i!=k&&parent[i]==-1){ parent[i]=q.front(); q.push(i); } } q.pop(); } } map> getChildren(){ map> ret; for(int i=0;i bfs(){ vector order(1,root); map> children=getChildren(); for(int i=0;i getDepth(){ vector depth(numberOfNodes); vector order=bfs(); depth[root]=0; for(int i=1;i>N; set> edges; for(int i=0;i temp(2); for(int j=0;j<2;++j){ cin>>temp[j]; --temp[j]; } edges.insert(temp); } tree T(N,edges,0); vector d=T.getDepth(),ans(N,0),ord=T.bfs(); for(vector v:edges){ if(d[max(v[0],v[1])]