/*
TASK:marriage
LANG:C
*/
#include<stdio.h>
#include<stdlib.h>
#define maxN 105

int mlad[maxN][maxN],dev[maxN][maxN];
int n,panic=0;
int C[maxN][maxN];

int cmp(const void *a,const void *b)
{return *(int*)a - *(int*)b;}

int main()
{
int i,j,k;
scanf("%d",&n);
for (i=1;i<=n;i++) for (j=1;j<=n;j++) scanf("%d",&mlad[i][j]);
for (i=1;i<=n;i++) for (j=1;j<=n;j++) scanf("%d",&dev[i][j]);
for (i=1;i<=n;i++)
    for (j=1;j<=n;j++){
        int sum=0;
        for (k=1;k<=n;k++) sum+=(mlad[i][k]*dev[k][j]);
        C[i][j] = sum;}

for (i=1;i<=n;i++) for (j=1;j<=n;j++) mlad[i-1][j-1] = C[i][j];
for (i=0;i<n;i++) qsort(mlad[i],n,sizeof(mlad[i][0]),cmp);
for (i=0;i<n;i++)
    for (j=1;j<n;j++) if (mlad[i][j] == mlad[i][j-1]) panic=1;
if (panic) {printf("0\n");return 0;}
for (i=1;i<=n;i++)
    {
    int max=0,pos=0;
    for (j=1;j<=n;j++) if (C[i][j] > max) {max=C[i][j];pos=j;}
    for (k=1;k<=n;k++) C[k][pos] = 0;
    printf("%d %d\n",i,pos);
    }
return 0;
}
