
{
TASK:marriage
LANG:PASCAL
}

var
used,used1:array[1..100] of byte;
n,j,k,l,i,q:integer;
m,d:array[1..100,1..100]of integer;
procedure AZ(mom:integer);
begin
  for i:=1 to n do
   for j:=1 to n do
    if (m[i,j]=mom)and(used[j]=0)and(used1[i]=0) then
      begin
       writeln(i,' ',j);
       used[j]:=1;
       used1[i]:=1;
      end
     else
      if (m[i,j]=mom)and(used[j]=1) then
       az(mom-1);
end;
begin
 readln(n);
 for i:=1 to n do
  begin
   for j:=1 to n do
    read(m[i,j]);
   writeln;
  end;
 for i:=1 to n do
  begin
   for j:=1 to n do
    read(d[i,j]);
   writeln;
  end;

 for q:=n downto 1 do
  az(q);
end.