var
t,m,n,k,ans:longint;
w:array[1..500,1..500] of longint;
d:array[1..500] of longint;
used:array[1..500] of boolean;
procedure init;
var
i,j:longint;
begin
fillchar(d,sizeof(d),0);
fillchar(used,sizeof(used),false);
fillchar(w,sizeof(w),0);
read(n);
for i:=1 to n do
for j:=1 to n do
read(w[i,j]);
ans:=0;
end;
procedure prim(s:longint);
var
k,i,pos,min:longint;
begin
used[s]:=true;
for i:=1 to n do
d[i]:=w[s,i];
for k:=1 to n-1 do
begin
min:=maxlongint;
for i:=1 to n do
if (not used[i])and(d[i]
begin
min:=d[i];
pos:=i;
end;
used[pos]:=true;
if ans
for i:=1 to n do
if (not used[i])and(d[i]>w[pos,i]) then
d[i]:=w[pos,i];
end;
end;
begin
readln(t);
for k:=1 to t do
begin
init;
prim(1);
writeln(ans);
end;
end.