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

using namespace std;

int n,i,j;
typedef struct
{
    int num,gr;
}grade;
grade boyz[105][105],hoez[105][105];
int used[105],mar[105][2];
int cmp(const void *a,const void *b)
{
    return -((*(grade*)a).gr-(*(grade*)b).gr);
}
int main()
{
	cin>>n;
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
		{
			cin>>boyz[i][j].gr;
			boyz[i][j].num=j;
		}
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
		{
			cin>>hoez[i][j].gr;
			hoez[i][j].num=j;
		}
	for(i=0;i<n;i++)
		qsort(boyz[i],n,sizeof(grade),cmp);
	for(int i=0;i<n;i++)
	{
		j=0;
		while(used[boyz[i][j].num])
			j++;
		mar[i][0]=i;
		mar[i][1]=boyz[i][j].num;
		used[boyz[i][j].num]=true;
	}
	for(i=0;i<n;i++)
		cout<<mar[i][0]+1<<" "<<mar[i][1]+1<<"\n";
/*	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
			cout<<boyz[i][j].gr;
		cout<<"\n";
	} */
    return 0;
}