{
TASK: marriage
LANG: PASCAL
}
var
   i,j,k,n,x : LongInt;
   m,d,m2,d2 : array[1..100,1..100] of byte;
   a,b : array[1..100] of byte;
   dvoiki : array[1..100,1..2] of byte;
procedure prov;
var
   kk,ll : LongInt;
begin
for kk:=1 to n do
 for ll:=n downto 1 do
  begin
   if m[kk,ll]=a[kk] then break;
   x:=m[kk,ll];
   if not (d2[x,b[x]]>d2[x,kk])
    then
     exit;
  end;
for kk:=1 to n do
 writeln(kk,' ',a[kk]);
halt;
end;
procedure rec(mm : LongInt);
var
   ii,jj : LongInt;
begin
if mm>n
 then
  begin
   prov;
   exit;
  end;
for ii:=n downto 1 do
 begin
  if a[ii]=0
   then
    begin
     a[ii]:=mm;
     b[mm]:=ii;
     rec(mm+1);
     a[ii]:=0;
     b[mm]:=0;
    end;
 end;
end;
begin
readln(n);
 for i:=1 to n do
  begin
   for j:=1 to n-1 do
    begin
     read(x);
     m[i,x]:=j;
     m2[i,j]:=x;
    end;
   readln(x);
   m[i,x]:=j+1;
   m2[i,j+1]:=x;
  end;
 for i:=1 to n do
  begin
   for j:=1 to n-1 do
    begin
     read(x);
     d[i,x]:=j;
     d2[i,j]:=x;
    end;
   readln(x);
   d[i,x]:=j+1;
   d2[i,j+1]:=x;
  end;
rec(1);
writeln('0');
end.