#include <stdio.h>
struct nod{long info; nod* next;};
long n,i,j,t,max,v1,v2,nm,ct,vl,valo,k;
nod *tati[100001],*nivel[100001];
long tmin[100001],niv[100001],fii[100001];
FILE*f=fopen("zvon.in","r");
FILE*g=fopen("zvon.out","w");
long part(long st, long dr)
{
long i=st,j=dr,s=-1,aux;
while (i<j)
{
if (fii[i]<fii[j])
{
aux=fii[i];
fii[i]=fii[j];
fii[j]=aux;
s=-s;
}
if (s==1) i++;
else j--;
}
return i;
}
void qsort(long st, long dr)
{
long p;
if (st<dr)
{
p=part(st,dr);
qsort(st,p-1);
qsort(p+1,dr);
}
}
void qin(nod*& first, long vl)
{
nod* p;
p=new nod;
p->info=vl;
p->next=first;
first=p;
}
void qout(nod*& first, long& vl)
{
nod* p;
vl=first->info;
p=first;
first=first->next;
delete(p);
}
void solv()
{
fscanf(f,"%ld",&n);
niv[1]=1; nm=0;
qin(nivel[1],1);
for (i=1; i<=n-1; i++)
{
fscanf(f,"%ld%ld",&v1,&v2);
qin(tati[v1],v2);
niv[v2]=niv[v1]+1;
qin(nivel[niv[v2]],v2);
if (niv[v2]>nm) nm=niv[v2];
}
for (i=nm-1; i>=1; i--)
{
while (nivel[i]!=NULL)
{
qout(nivel[i],vl);
ct=0;
while (tati[vl]!=NULL)
{
qout(tati[vl],valo);
ct++;
fii[ct]=valo;
}
qsort(1,ct);
max=-50000;
for (j=1; j<=ct; j++)
if (tmin[fii[j]]+j>max) max=tmin[fii[j]]+j;
tmin[vl]=max;
}
}
fprintf(g,"%ld\n",tmin[1]);
if (nivel[1]!=NULL) qout(nivel[1],vl);
}
int main()
{
fscanf(f,"%ld",&t);
for (k=1; k<=t; k++)
solv();
return 0;
}