#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const int MAX_N=201000;
const int INF=0x3f3f3f3f;
vector<int>v[MAX_N];
int a[MAX_N],tot;
int dep[MAX_N],dp[MAX_N];
int k;
void dfs(int x,int fa){
	int i;
	dp[x]=INF;
	int tot=0;
	for(i=0;i<v[x].size();i++){
		int y=v[x][i];
		if(y==fa)
		continue;
		dep[y]=dep[x]+1;
		dfs(y,x);
		dp[x]=min(dp[x],dp[y]);
	}
	if(dp[x]==INF)
	dp[x]=dep[x];
	for(i=0;i<v[x].size();i++){
		int y=v[x][i];
		if(y==fa)
		continue;
		a[++tot]=dp[y];
	}
	sort(a+1,a+tot+1);
	if(x==1){
		if(tot==1)
		k=max(k,a[1]-dep[1]);
		else
		k=max(k,max(a[tot]-dep[1],a[1]-dep[1]+1));
		for(i=2;i<tot;i++)
		k=max(k,a[i]-dep[1]+1); 
	}
	else if(tot>1)
	k=max(k,a[tot]-dep[x]+1);
}
int main(void){
	int T,n,i,x,y;
	cin>>T;
	while(T--){
		scanf("%d",&n);
		for(i=1;i<=n;i++){
			dp[i]=INF;
			v[i].clear();
		}
		for(i=1;i<n;i++){
			scanf("%d%d",&x,&y);
			v[x].push_back(y);
			v[y].push_back(x);
		}
		dep[1]=1;
		k=0;
		dfs(1,0);
		printf("%d\n",k);
	}
	return 0;
}
/*
1
4
2 1
1 3
4 3
*/
/*
7
2
1 2
2
2 1
3
1 2
3 1
3
1 2
3 2
3
1 3
2 3
4
1 2
1 3
4 1
4
1 2
1 3
4 2
4
2 1
1 3
4 3
*/