/*
TASK:marriage
LANG:C++
*/
#include <iostream>
#include <stdlib.h>
using namespace std;

typedef struct{
        int d;
        int m;
} A;
A masivec[101];
int f[101][101],g[101][101],n,i,j,used[2][101];

bool qwerty(int q,int t,int u){
     if((f[q][t]>f[q][masivec[u].d]||g[masivec[u].d][masivec[u].m]>g[masivec[u].d][q])&&(f[masivec[u].m][masivec[u].d]>f[masivec[u].m][t]||g[t][q]>g[t][masivec[u].m])) return 1;
     return 0;
}

void xax_rekursiq(int r){
                      int k,l,o;
                      if(r==n){
                               for(i=1;i<n;i++)
                                                for(j=i+1;j<=n;j++) if(!qwerty(masivec[j].m,masivec[j].d,i)) return;
                               for(i=1;i<=r;i++) cout<<masivec[i].m<<" "<<masivec[i].d<<"\n";
                               exit(0);
                      }
                      for(k=1;k<=n;k++){
                                        if(used[0][k]) continue;
                                        for(l=1;l<=n;l++){
                                                          if(used[1][l]) continue;
                                                          if(r!=0){
                                                                  o=1;
                                                                  while(1){
                                                                   for(;qwerty(k,l,o)&&o<=r;o++);
                                                                   if(o<=r) break;
                                                                   masivec[r+1].m=k;
                                                                   masivec[r+1].d=l;
                                                                   used[0][k]=1;
                                                                   used[1][l]=1;
                                                                   xax_rekursiq(r+1);
                                                                   used[0][k]=0;
                                                                   used[1][l]=0;
                                                                   break;
                                                                  }
                                                          }else{
                                                                masivec[r+1].m=k;
                                                                masivec[r+1].d=l;
                                                                used[0][k]=1;
                                                                used[1][l]=1;
                                                                xax_rekursiq(r+1);
                                                                used[0][k]=0;
                                                                used[1][l]=0;
                                                          }
                                        }
                      }
}

int main(){
    cin>>n;
    for(i=1;i<=n;i++)
                     for(j=1;j<=n;j++) cin>>f[i][j];
    for(i=1;i<=n;i++)
                     for(j=1;j<=n;j++) cin>>g[i][j];
    xax_rekursiq(0);
    cout<<"0\n";
    return 0;
}
