var fi,fo:text;
k,max,t,n,i,j,v1,v2,nnn:longint;
a,nivel:array[0..1000,0..1000]of longint;
niv,nr,tmin,nn:array[0..100000]of longint;
function part(poz,st,dr:longint):longint;
var i,j,aux,s:longint;
begin
i:=st; j:=dr; s:=-1;
while i<j do
begin
if a[poz,st]<a[poz,dr] then
begin
aux:=a[poz,st];
a[poz,st]:=a[poz,dr];
a[poz,dr]:=aux;
s:=-s;
end;
if s=1 then inc(i)
else dec(j);
end;
part:=i;
end;
procedure qsort(nod,st,dr:longint);
var p:longint;
begin
if st<dr then
begin
p:=part(nod,st,dr);
qsort(nod,st,p-1);
qsort(nod,p+1,dr);
end;
end;
function findmax(nod:longint):longint;
var i:longint;
begin
qsort(nod,1,nr[nod]);
max:=-maxint;
for i:=1 to nr[nod] do
if tmin[a[nod,i]]+i>max then max:=tmin[a[nod,i]]+i;
findmax:=max;
end;
procedure solv;
begin
read(fi,n);
niv[1]:=1;
nn[1]:=1;
nivel[1,1]:=1;
for i:=1 to n-1 do
begin
read(fi,v1,v2);
inc(nr[v1]);
a[v1,nr[v1]]:=v2;
niv[v2]:=niv[v1]+1;
inc(nn[niv[v2]]);
nivel[niv[v2],nn[niv[v2]]]:=v2;
if niv[v2]>nnn then nnn:=niv[v2];
end;
for i:=nnn-1 downto 1 do
for j:=1 to nn[i] do
tmin[nivel[i,j]]:=findmax(nivel[i,j]);
writeln(fo,tmin[1]);
for i:=1 to nnn do
for j:=1 to nn[i] do
nivel[i,j]:=0;
for i:=1 to n do
for j:=1 to nr[i] do
a[i,j]:=0;
for i:=1 to n do
begin
niv[i]:=0;
nn[i]:=0;
nr[i]:=0;
end;
end;
begin
assign(fi,'zvon.in'); reset(fi);
assign(fo,'zvon.out'); rewrite(fo);
read(fi,t);
for k:=1 to t do
solv;
close(fi);
close(fo);
end.