#include #include #include #include #include #include using namespace std; using mint=atcoder::modint998244353; int N; vectorG[1<<17]; int sz[1<<17]; void dfs0(int u,int p) { sz[u]=0; for(int v:G[u])if(v!=p) { dfs0(v,u); sz[u]=max(sz[u],sz[v]+1); } } vector >T; void dfs1(int u,int p,int pd) { pairmx1=make_pair(pd,p),mx2=make_pair(-1,-1),mx3=make_pair(-1,-1); auto upd=[&](int d,int u){ paircur=make_pair(d,u); if(mx1=0) { int A=mx1.first,B=mx2.first,C=mx3.first; arrayt; t[0]=A+B; t[1]=A+C; t[2]=B+C; sort(t.begin(),t.begin()+3); //reverse(t.begin(),t.begin()+3); t[3]=A+B+C; T.push_back(t); /* cout<>N; for(int i=1;i>u>>v; u--,v--; G[u].push_back(v); G[v].push_back(u); } dfs0(0,-1); dfs1(0,-1,-1); sort(T.begin(),T.end()); //for(auto t:T)cout<