#include #include using namespace std; int n; int input[10100][2]; int c[10100]; bool ps[10100]; vector v[10100]; int ans; int md; int bi; void dfs(int node, int depth) { ps[node] = true; if (depth > md) { md = depth; bi = node; } for (int i = 0; i < v[node].size(); i++) { int j = v[node][i]; if (!ps[j]) dfs(j, depth+ 1); } } int findmax(int node) { md = 0; memset(ps, 0, sizeof(ps)); dfs(node, 0); return bi; } int l[10101]; void bt(int node, int target, int depth) { l[depth] = node; ps[node ] = true; if (node == target) { ans = l[depth/2]; return; } for (int i = 0; i < v[node].size(); i++) { int j = v[node][i]; if (!ps[j]) bt(j, target, depth+ 1); } } void solve(int v1, int v2) { memset(ps, 0, sizeof(ps)); bt(v1, v2, 0); } int main(void) { int t; //freopen("b.in", "rt", stdin); scanf("%d", &t); while (t--) { scanf("%d", &n); memset(c, 0, sizeof(c)); for (int i = 0; i < n; i++) v[i].clear(); for (int i = 0; i < n-1; i++) { int x, y; scanf("%d%d",&x, &y); --x; --y; v[x].push_back(y); v[y].push_back(x); } int v1 = findmax(4); //printf("Max Distanced to 5 is %d\n", v1+1); int v2 = findmax(v1); //printf("Max Distanced to %d is %d\n", v1+1, v2+1); solve(v1, v2); //printf("Best vertex is %d\n", ans + 1); int v3 = findmax(ans); ans = md; printf("%d\n", ans); } return 0; }