#include<bits/stdc++.h>
using namespace std;
#define mk make_pair
#define in insert
#define pb push_back
#define pf push_front
#define pob pop_back
#define pof pop_front
#define all(a) a.begin(),a.end()
typedef long long int ll;typedef long int l;typedef pair<int,int> pii;
const ll INF=(1<<28);
const ll MOD=(1e9+7);
const double PI=acos(-1);

vector< int > v[100002];
int n;
int dist[100002]={0};
bool visit[100002]={0};

void dfs(int node){
    queue<int> q;
    q.push(node);
    dist[node]=0;
    visit[node] = 1;
    while(!q.empty()){
        int fst = q.front();
        q.pop();
        for(int i=0;i<v[fst].size();i++){
            int temp = v[fst][i];
            if(!visit[temp]){
            visit[temp]=1;
            dist[temp] = dist[fst]+1;
            q.push(temp);}
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(false);cin.tie(NULL);
    int t;cin>>t;
    while(t--){
        cin>>n;
        for(int i=0;i<n-1;i++){
            int x,y;
            cin>>x>>y;
            v[x].pb(y);v[y].pb(x);
        }
        int maxx = 0,node;
        dfs(1);
        for(int i=0;i<n;i++){
            if(dist[i]>maxx){maxx=dist[i];node = i;}
        }
        memset(dist, 0 ,sizeof(dist));
        dfs(node);
        maxx=0;
                for(int i=0;i<n;i++){
            if(dist[i]>maxx){maxx=dist[i];}
        }
        if(maxx%2)cout<<(maxx/2)<<endl;
        else cout<<(maxx+1)/2<<endl;
        for(int i=0;i<n+1;i++)v[i].clear();
        memset(dist, 0 ,sizeof(dist));
        memset(visit,0,sizeof(visit));
    }
return 0;
}