{
TASK:MARRIAGE
LANG:PASCAL
}
var
b,g:array[1..100,1..100] of byte;
bb,bg:array[1..100] of byte;
couple:array[1..101] of record b,g:byte;end;
couples,n,i,j,k:byte;
function cancouple(boy,girl:byte):boolean;
var i:byte;ca:boolean;
mi,mj,di,dj:byte;
begin
ca:=true;
for i:=1 to couples do
   begin
   di:=couple[i].g;
   mi:=couple[i].b;
   dj:=girl;
   mj:=boy;
  if not(
          ((b[mi][di]>b[mi][dj])or(g[dj][mj]>g[dj][mi]))and
          ((b[mj][dj]>b[mj][di])or(g[di][mi]>g[di][mj]))
          )
       then begin
           // writeln(b[mi][di],'>',b[mi][dj],'or',g[dj][mj],'>',g[dj][mi],(b[mi][di]>b[mi][dj])or(g[dj][mj]>g[dj][mi]));
           // writeln(b[mj][dj],'>',b[mj][di],'or',g[di][mi],'>',g[di][mj],(b[mj][dj]>b[mj][di])or(g[di][mi]>g[di][mj]));
           // writeln('cant couple ',mi,' and ',di,'  with  ',mj,' and ',dj);
            ca:=false;
            break;
            end;
       end;
cancouple:=ca;


end;

procedure rec;
var i,j:byte;

begin
if couples=n then begin
                  for i:=1 to couples do writeln(couple[i].b,' ',couple[i].g);
                  halt(0);
                  end;
for i:=1 to n do
  if bb[i]=0 then
    for j:=n downto 1 do if bg[b[i][j]]=0 then
      if cancouple(i,b[i][j]) then begin
                                   bb[i]:=1;
                                   bg[b[i][j]]:=1;
                                   inc(couples);
                                   couple[couples].b:=i;
                                   couple[couples].g:=b[i][j];
                                   rec;
                                   dec(couples);
                                   bb[i]:=0;
                                   bg[b[i][j]]:=0;
                                   end;

end;


begin
readln(n);
for i:=1 to n do
 for j:=1 to n do begin
                  read(k);
                  b[i,k]:=j;
                  end;
for i:=1 to n do
 for j:=1 to n do begin
                  read(k);
                  g[i,k]:=j;
                  end;

rec;
writeln(0);
end.
