#include #include #include using namespace atcoder; using mint = modint998244353; using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf 1000000001 int N; vector> E; vector sz,dpA,dpB; void dfs(int cur,int p){ sz[cur] = 1; rep(i,E[cur].size()){ int to = E[cur][i]; if(to==p)continue; dfs(to,cur); sz[cur] += sz[to]; } } void dfs1(int cur,int p){ dpA[cur] = 1; rep(i,E[cur].size()){ int to = E[cur][i]; if(to==p)continue; dfs1(to,cur); } rep(i,E[cur].size()){ int to = E[cur][i]; if(to==p)continue; dpB[cur] = max(dpB[cur],dpA[to] + 1); dpB[cur] = max(dpB[cur],dpB[to]); dpA[cur] = max(dpA[cur],dpA[to]); if(dpA[to]!=sz[to]){ dpA[cur] = max(dpA[cur],dpA[to]+2); } } vector dp(4,0); rep(i,E[cur].size()){ int to = E[cur][i]; if(to==p)continue; vector ndp(4,0); rep(j,4){ ndp[j] = max(ndp[j],dp[j]); rep(k,2){ if((j>>k)&1)continue; ndp[j|(1< ndp(4,0); rep(j,4){ ndp[j] = max(ndp[j],dp[j]); rep(k,2){ if((j>>k)&1)continue; if(k==0)ndp[j|(1<>N; E.resize(N); rep(i,N-1){ int u,v; cin>>u>>v; u--;v--; E[u].push_back(v); E[v].push_back(u); } sz.resize(N,0); dpA.resize(N,0); dpB.resize(N,0); dfs(0,-1); dfs1(0,-1); int ans = 0; rep(i,N){ ans = max(ans,dpA[i]); ans = max(ans,dpB[i]); } /* rep(i,N){ cout<