#include using namespace std; #define rep(i,n) for(int i=0;i<(int)(n);++i) int N; vectorg[2<<17]; int dp[2<<17]; int dfs(int v,int prev=-1){ dp[v]=0; for(int vv:g[v]){ if(vv==prev)continue; dp[v]=max(dp[v],dfs(vv,v)+1); } return dp[v]; } int ans=0; void dfs2(int v,int prev=-1){ vectorret(g[v].size()); rep(i,g[v].size())ret[i]=dp[g[v][i]]; sort(ret.begin(),ret.end()); ans=max(ans,1+(int)ret.size()*(1+ret[0])); int init=dp[v]; for(int vv:g[v]){ if(vv==prev)continue; if(dp[vv]==ret.back()){ if(2<=(int)ret.size()){ dp[v]=ret[(int)ret.size()-2]+1; }else{ dp[v]=0; } } dfs2(vv,v); } dp[v]=init; } signed main(){ cin.tie(0)->sync_with_stdio(0); cin>>N; rep(i,N-1){ int u,v;cin>>u>>v,--u,--v; g[u].emplace_back(v); g[v].emplace_back(u); } dfs(0); //rep(i,N)cout<