program teams;
var rest,alast,blast,which,c,d,e,f,g,h,i,j,k,m,n,now,amount:longint;
finish,finish2:boolean;
know:array[1.. 100,1.. 100] of boolean;
use,re:array[1.. 100] of boolean;
a,b,know2,disknow:array[1.. 100,0.. 100] of longint;
number:array[1.. 100,1.. 2] of longint;
sum:array[0.. 100,0.. 200] of boolean;
begin
assign(input,'river.in');
reset(input);
fillchar(use,sizeof(use),false);
fillchar(know,sizeof(know),false);
fillchar(know2,sizeof(know2),0);
read(n);
for i:=1 to n do begin
know[i,i]:=true;
end;
for i:=1 to n do begin
repeat
read©;
if c>0 then begin
know[i,c]:=true;
end;
until c=0;
for j:=1 to n do begin
if not know[i,j] then begin
inc(disknow[i,0]);
disknow[i,disknow[i,0]]:=j;
end;
end;
end;
which:=0;
repeat
inc(which);
finish:=true;
for i:=1 to n do begin
for j:=1 to n do begin
if (not use[i]) and (not use[j]) and (not know[i,j]) then begin
c:=i;
d:=j;
finish:=false;
break;
end;
end;
if not finish then break;
end;
if not finish then begin
a[which,1]:=c;
b[which,1]:=d;
use[c]:=true;
use[d]:=true;
alast:=1;
blast:=1;
fillchar(re,sizeof(re),false);
repeat
finish2:=true;
for i:=1 to alast do begin
amount:=disknow[a[which,i],0];
if amount>0 then begin
for j:=1 to amount do begin
now:=disknow[a[which,i],j];
if not use[now] then begin
re[now]:=true;
finish2:=false;
end;
end;
end;
end;
for i:=1 to blast do begin
amount:=disknow[b[which,i],0];
if amount>0 then begin
for j:=1 to amount do begin
now:=disknow[b[which,i],j];
if not use[now] then begin
if re[now] then begin
writeln('no solution');
halt;
end
else begin
inc(alast);
a[which,alast]:=now;
use[now]:=true;
finish2:=false;
end;
end;
end;
end;
end;
for i:=1 to n do begin
if re[i] then begin
inc(blast);
b[which,blast]:=i;
use[i]:=true;
end;
end;
until finish2;
number[which,1]:=alast;
number[which,2]:=blast;
end;
until finish;
rest:=n;
for i:=1 to which do begin
rest:=rest-number[which,1]-number[which,2];
end;
sum[0,0]:=true;
for k:=1 to which do begin
for i:=n downto 0 do begin
for j:=n downto 0 do begin
if sum[i,j] then begin
sum[i+number[k,1],j+number[k,2]]:=true;
sum[i+number[k,2],j+number[k,1]]:=true;
end;
end;
end;
end;
{writeln(sum[2,1]);}
for k:=0 to n do begin
for i:=1 to n do begin
if sum[i,i+k] then begin
if k>=rest then begin
writeln(i+rest);
writeln(k);
end
else begin
if (n div 2=0) then begin
writeln(n div 2);
writeln(n div 2);
end
else begin
writeln((n+1) div 2);
writeln(n-((n+1) div 2));
end;
end;
halt;
end;
end;
end;
close(input);
end.