#include <bits/stdc++.h>
#define ll long long int
#define fastIO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define ff first
#define ss second
#define pb push_back
#define po pop_back()
#define lb lower_bound
#define ub upper_bound
#define nl "\n"
#define dbg(x) cout << (#x) << " = " << (x) << nl
#define fl(i,a,b,c) for(int i=a;i<b;i+=c)
#define rl(i,a,b,c) for(int i=a;i>b;i-=c)
#define sn(a,l) fl(i,0,l,1) cin >> a[i]
#define pr(a,l) fl(i,0,l,1) cout << a[i] << ' '
#define all(a) a.begin(),a.end()
#define sz(a) (int)a.size()
#define test() int ts; cin>>ts; while(ts--)
const int INF = 1e9 + 1;
const int MOD = 1e9 + 7;
const int N = 1e5 + 5;
const int K = 20;
using namespace std;
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
// using namespace __gnu_pbds;
// template<class T> using oset = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
// CODE BEGINS HERE ---
int n, node, mx;
vector<int> lst[N];
void reset()
{
fl(i,0,n+1,1)
lst[i].clear();
}
void dfs(int u, int p=0, int d=0)
{
if(d > mx)
{
mx = d;
node = u;
}
for(auto v : lst[u])
if(v ^ p)
dfs(v, u, d+1);
}
void solve()
{
cin >> n;
reset();
fl(i,1,n,1)
{
int u, v;
cin >> u >> v;
lst[u].pb(v);
lst[v].pb(u);
}
mx = 0;
dfs(1);
mx = 0;
dfs(node);
cout << (mx + 1)/2;
cout << nl;
}
int main()
{
fastIO
test()
solve();
return 0;
}
CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgojZGVmaW5lIGxsIGxvbmcgbG9uZyBpbnQKI2RlZmluZSBmYXN0SU8gaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiNkZWZpbmUgZmYgZmlyc3QKI2RlZmluZSBzcyBzZWNvbmQKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBwbyBwb3BfYmFjaygpCiNkZWZpbmUgbGIgbG93ZXJfYm91bmQKI2RlZmluZSB1YiB1cHBlcl9ib3VuZAojZGVmaW5lIG5sICJcbiIKI2RlZmluZSBkYmcoeCkgY291dCA8PCAoI3gpIDw8ICIgPSAiIDw8ICh4KSA8PCBubAojZGVmaW5lIGZsKGksYSxiLGMpIGZvcihpbnQgaT1hO2k8YjtpKz1jKQojZGVmaW5lIHJsKGksYSxiLGMpIGZvcihpbnQgaT1hO2k+YjtpLT1jKQojZGVmaW5lIHNuKGEsbCkgZmwoaSwwLGwsMSkgY2luID4+IGFbaV0KI2RlZmluZSBwcihhLGwpIGZsKGksMCxsLDEpIGNvdXQgPDwgYVtpXSA8PCAnICcKI2RlZmluZSBhbGwoYSkgYS5iZWdpbigpLGEuZW5kKCkKI2RlZmluZSBzeihhKSAoaW50KWEuc2l6ZSgpCiNkZWZpbmUgdGVzdCgpIGludCB0czsgY2luPj50czsgd2hpbGUodHMtLSkKY29uc3QgaW50IElORiA9IDFlOSArIDE7CmNvbnN0IGludCBNT0QgPSAxZTkgKyA3Owpjb25zdCBpbnQgTiA9IDFlNSArIDU7CmNvbnN0IGludCBLID0gMjA7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyAjaW5jbHVkZSA8ZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHA+IAovLyAjaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4gCi8vIHVzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOyAKCi8vIHRlbXBsYXRlPGNsYXNzIFQ+IHVzaW5nIG9zZXQgPSB0cmVlPFQsIG51bGxfdHlwZSwgbGVzczxUPiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT47CgovLyBDT0RFIEJFR0lOUyBIRVJFIC0tLSAKCmludCBuLCBub2RlLCBteDsKdmVjdG9yPGludD4gbHN0W05dOwoKdm9pZCByZXNldCgpCnsKICAgIGZsKGksMCxuKzEsMSkKICAgICAgICBsc3RbaV0uY2xlYXIoKTsKfQoKdm9pZCBkZnMoaW50IHUsIGludCBwPTAsIGludCBkPTApCnsKICAgIGlmKGQgPiBteCkKICAgIHsKICAgICAgICBteCA9IGQ7CiAgICAgICAgbm9kZSA9IHU7CiAgICB9CiAgICBmb3IoYXV0byB2IDogbHN0W3VdKQogICAgICAgIGlmKHYgXiBwKQogICAgICAgICAgICBkZnModiwgdSwgZCsxKTsKfQoKdm9pZCBzb2x2ZSgpCnsKICAgIGNpbiA+PiBuOwogICAgCiAgICByZXNldCgpOwogICAgCiAgICBmbChpLDEsbiwxKQogICAgewogICAgICAgIGludCB1LCB2OwogICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgbHN0W3VdLnBiKHYpOwogICAgICAgIGxzdFt2XS5wYih1KTsKICAgIH0KICAgIAogICAgbXggPSAwOwogICAgZGZzKDEpOwogICAgCiAgICBteCA9IDA7CiAgICBkZnMobm9kZSk7CiAgICAKICAgIGNvdXQgPDwgKG14ICsgMSkvMjsKICAgIAogICAgY291dCA8PCBubDsKfQogCmludCBtYWluKCkKewogICAgZmFzdElPCiAgICB0ZXN0KCkKICAgIHNvbHZlKCk7CiAgICByZXR1cm4gMDsKfQo=