#include using namespace std; int main(){ int n; cin>>n; vector> G(n); for(int i=0;i>u>>v; u--;v--; G[u].push_back(v); G[v].push_back(u); } int par[n]; par[0]=-1; vector> child(n); function dfs=[&](int cur,int from){ for(int to:G[cur]){ if(to==from) continue; par[to]=cur; child[cur].push_back(to); dfs(to,cur); } }; dfs(0,-1); vector dist(n); dist[0]=0; function dfs0=[&](int cur){ for(int to:child[cur]){ dist[to]=dist[cur]+1; dfs0(to); } }; dfs0(0); vector d(n); function dfs1=[&](int cur){ for(int to:child[cur]){ dfs1(to); } for(int to:child[cur]) d[cur]=max(d[cur],d[to]); d[cur]+=1; }; dfs1(0); vector> ms(n); function dfs2=[&](int cur){ for(int to:child[cur]){ ms[cur].insert(d[to]); } if(par[cur]!=-1){ int p=par[cur]; ms[p].erase(ms[p].find(d[cur])); //cerr<<-6; ms[cur].insert(1+(ms[p].size()>0?*ms[p].rbegin():0)); ms[p].insert(d[cur]); } for(int to:child[cur]){ dfs2(to); } }; //cerr<<-3; dfs2(0); //cerr<<-4; int ans=0; for(int i=0;i tmp; for(int key:ms[i]) tmp.push_back(key); sort(tmp.begin(),tmp.end()); for(int j=0;j