/*
TASK:marriage
LANG:C++
*/
#include <iostream>
#define MAXN 100
using namespace std;
int a[MAXN][MAXN];
int b[MAXN][MAXN];
int c[MAXN][2];
int n;
void make();
//bool check();
void print();
int main()
{
    cin >> n;
    for (int i=0;i < n;i++)
     for (int j=0;j < n;j++)
      cin >> a[i][j];
    for (int i=0;i < n;i++)
     for (int j=0;j < n;j++)
      cin >> b[i][j];
    make();
    //if (!check()) cout << "0";
    //else print();
    print();
    //cout << endl;
    //system("pause");
}
    
/*bool check()
{
     for (int i=0;i < n;i++)
      for (int j=i+1;j < n;j++)
      {
          if (c[i][2] < a[i][c[j][1]]) return false;
          if (c[i][3] < b[i][c[j][0]]) return false;
      }
     return true;
}*/

void make()
{
     int k=0;
     bool used[n];
     for (int i=0;i < n;i++)
      used[i] = false;
     for (int i=0;i < n;i++)
     {
         for (int max=n;max > 1;max--) 
         {
             int j;
             for (j=0;j < n;j++)
              if (a[i][j] == max) break;
             if (!used[j])
             {
                          used[j] = true;
                          //cout << i+1 << " " << j+1 << endl;
                          c[k][0] = i;
                          c[k][1] = j;
                          //c[k][2] = max;
                          //c[k][3] = b[j][i];
                          break;
             }
         }
         k++;
     }
}
             
              
void print()
{
     for (int i=0;i < n;i++)
      cout << c[i][0]+1 << " " << c[i][1]+1 << endl;
}             
