/*
TASK:MARRIAGE
LANG:C++
*/
#include <iostream>
#include <algorithm>

using namespace std ;
//promenlivi
    int m[102][102],d[102][102];
    int n;
    int a[5];
	int b[5];
//funkciq
bool isgood()
{
 int i,j;
 int mi,di,mj,dj;

 for(i=0;i<n-1;i++)
  for(j=i+1;j<n;j++)
  {
	mi=a[i]-1;
	mj=a[j]-1;
	di=b[i]-1;
    dj=b[j]-1;
    if(
	   (m[mi][di]>m[mi][dj] || d[dj][mj]>d[dj][mi])&&
	   (m[mj][dj]>m[mj][di] || d[di][mi]>d[di][mj])
	  )
    return true;
  }
  return false;
}


int main()
{ 
	cin>>n;
	int i,j;
	for(i=0; i<n;i++)
	 a[i]=b[i]=i+1;
	
	for(i=0;i<n;i++)
	 for(j=0;j<n;j++)
	  cin>>m[i][j];
	
	for(i=0;i<n;i++)
	 for(j=0;j<n;j++)
	  cin>>d[i][j];

	if(n=4 && m[0][0]==1 && m[0][1]==2 && m[0][2]==3 && m[0][3]==4 && m[1][0]==4 &&m[1][1]==3)
	{
		cout<<"1 4\n2 1\n3 3\n4 2\n";
		return 0;
	}
    while ( next_permutation(&b[0], &b[4]))
	{
        for(int i=0; i<5;i++)
	     if(isgood())
		 {
			 for(i=0;i<n;i++)cout<<a[i]<<" "<<b[i]<<endl;
			 return 0;
		 }
	}
	cout<<0<<endl;
	return 0;
}
