func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 1e6 + 10;   int e[maxn], ne[maxn], h[maxn], idx = 0;   int sz[maxn];   int ans = 0;   void add(int a, int b) {     e[idx] = b, ne[idx] = h[a];     h[a] = idx++;   }   void dfs(int now, int fa) {     sz[now] = 1;     for (int i = h[now]; i != -1; i = ne[i]) {       int j = e[i];       if (j == fa) continue;       dfs(j, now);       sz[now]++;     }   }   int dfs2(int now, int fa) {     int d1 = 0, d2 = 0;     for (int i = h[now]; i != -1; i = ne[i]) {       int j = e[i];       if (j == fa) continue;       int d = dfs2(j, now);       if (d > d1)         d2 = d1, d1 = d;       else if (d > d2)         d2 = d;     }     if (d1 >= 1 && d2 >= 1) {       if (now != 1)         ans = max(ans, d1 + d2 + sz[now] - 1);       else         ans = max(ans, d1 + d2 + sz[now] - 2);     } else if (d2 == 0 && d1 >= 1) {       if (now != 1)         ans = max(ans, d1 + sz[now]);       else         ans = max(ans, d1 + sz[now] - 1);     }     return (d1 == 0 ? 1 : d1 + sz[now] - 1);   }   int main() {     int t;     scanf( %d , &t);     memset(h, -1, sizeof h);     while (t--) {       int n;       scanf( %d , &n);       idx = 0;       ans = 0;       for (int i = 1; i <= n - 1; i++) {         int a, b;         scanf( %d%d , &a, &b);         add(a, b);         add(b, a);       }       dfs(1, -1);       dfs2(1, -1);       cout << ans << endl;       for (int i = 1; i <= n; i++) h[i] = -1, sz[i] = 0;     }     return 0;   }   