#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define PhTrNghia "TASK"
using namespace std;
const int maxn = 2e5 + 5;
const int inf = 1e18;
int n, ans;
vector <int> g[maxn];
int deg[maxn], dp[maxn];
void dfs (int u, int p){
int mx1 = 0, mx2 = 0;
for (int v : g[u]){
if (v == p) continue;
dfs (v, u);
mx2 = max(mx2, dp[v]);
if (mx2 > mx1) swap(mx1, mx2);
}
dp[u] = 0;
if (deg[u] >= 3) dp[u] = 1 + mx1;
if (deg[u] >= 4) ans = max (ans, mx1 + mx2 + 1);
ans = max (ans, dp[u]);
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
if (fopen(PhTrNghia".INP", "r")){
freopen(PhTrNghia".INP", "r", stdin);
freopen(PhTrNghia".OUT", "w", stdout);
}
int t;
cin >> t;
while (t--){
cin >> n;
for (int i = 1; i <= n; i++){
g[i].clear();
deg[i] = 0;
dp[i] = 0;
}
for (int i = 1; i < n; i++){
int u, v;
cin >> u >> v;
g[u].push_back (v);
g[v].push_back (u);
deg[u]++;
deg[v]++;
}
ans = 0;
dfs (1, 0);
cout << ans << endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGVuZGwgJ1xuJwojZGVmaW5lIFBoVHJOZ2hpYSAiVEFTSyIKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgbWF4biA9IDJlNSArIDU7CmNvbnN0IGludCBpbmYgPSAxZTE4OwoKaW50IG4sIGFuczsKdmVjdG9yIDxpbnQ+IGdbbWF4bl07CmludCBkZWdbbWF4bl0sIGRwW21heG5dOwoKdm9pZCBkZnMgKGludCB1LCBpbnQgcCl7CiAgICBpbnQgbXgxID0gMCwgbXgyID0gMDsKCiAgICBmb3IgKGludCB2IDogZ1t1XSl7CiAgICAgICAgaWYgKHYgPT0gcCkgY29udGludWU7CiAgICAgICAgZGZzICh2LCB1KTsKCiAgICAgICAgbXgyID0gbWF4KG14MiwgZHBbdl0pOwogICAgICAgIGlmIChteDIgPiBteDEpIHN3YXAobXgxLCBteDIpOwogICAgfQoKICAgIGRwW3VdID0gMDsKCiAgICBpZiAoZGVnW3VdID49IDMpIGRwW3VdID0gMSArIG14MTsgICAKCiAgICBpZiAoZGVnW3VdID49IDQpIGFucyA9IG1heCAoYW5zLCBteDEgKyBteDIgKyAxKTsKICAgIAogICAgYW5zID0gbWF4IChhbnMsIGRwW3VdKTsKfQoKc2lnbmVkIG1haW4oKXsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpZiAoZm9wZW4oUGhUck5naGlhIi5JTlAiLCAiciIpKXsKICAgICAgICBmcmVvcGVuKFBoVHJOZ2hpYSIuSU5QIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbihQaFRyTmdoaWEiLk9VVCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCiAgICBpbnQgdDsKICAgIGNpbiA+PiB0OwoKICAgIHdoaWxlICh0LS0pewogICAgICAgIGNpbiA+PiBuOwoKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspewogICAgICAgICAgICBnW2ldLmNsZWFyKCk7CiAgICAgICAgICAgIGRlZ1tpXSA9IDA7CiAgICAgICAgICAgIGRwW2ldID0gMDsKICAgICAgICB9CgogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbjsgaSsrKXsKICAgICAgICAgICAgaW50IHUsIHY7CiAgICAgICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgICAgIGdbdV0ucHVzaF9iYWNrICh2KTsKICAgICAgICAgICAgZ1t2XS5wdXNoX2JhY2sgKHUpOwogICAgICAgICAgICBkZWdbdV0rKzsKICAgICAgICAgICAgZGVnW3ZdKys7CiAgICAgICAgfQoKICAgICAgICBhbnMgPSAwOwoKICAgICAgICBkZnMgKDEsIDApOwoKICAgICAgICBjb3V0IDw8IGFucyA8PCBlbmRsOwogICAgfQoKICAgIHJldHVybiAwOwp9