#include<bits/stdc++.h>
#define N 1005
#define Ms(a,b) memset(a,b,sizeof a)
#define db(x) cout<<#x<<"="<<x<<endl;
#define db2(x,y) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<endl;
#define db3(x,y,z) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<endl;
using namespace std;
int n,a[N][N],c;
int mark[N];
int q[2][N],h[2],t[2];
int main() {
	scanf("%d",&n);
	for(int i=1; i<=n; i++)for(int j=1; j<n; j++)scanf("%d",&a[i][j]);
	for(int i=1; i<=n; i++)a[i][0]=1,q[0][t[0]++]=i;
	for(int i=1; ; i++) {
		c^=1,h[c]=t[c]=0;
		int f=1;
		while(h[c^1]<t[c^1]) {
			int j=q[c^1][h[c^1]++];
			if(mark[j]==i)continue;
			if(a[j][0]!=n)f=0;
			int to=a[j][a[j][0]];
			if(a[to][a[to][0]]==j) {
				mark[j]=mark[to]=i;
				q[c][t[c]++]=to,q[c][t[c]++]=j;
			}
		}
		if(f)return !printf("%d\n",i-1);
		if(t[c]==0)return !puts("-1");
		for(int i=h[c];i<t[c];i++)a[q[c][i]][0]++;
	}
	return 0;
}
