#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5;
const int M=1e6+5;
int n,f[N],b[N],a[N][N];
#define fi first
#define se second
typedef pair<int,int>P;
priority_queue<P,vector<P>,greater<P> >que;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		for(int j=1;j<n;j++)
			scanf("%d",&a[i][j]),b[i]=1;
	for(int i=1;i<=n;i++)
		if(i==a[a[i][1]][1])
			que.push(P(1,i)),++b[i];
	int ans=0,res=0;
	while(!que.empty()){
		P x=que.top();	que.pop();
		++res,ans=max(ans,f[x.se]);
		int k=a[x.se][b[x.se]];
		x.fi=max(x.fi,f[x.se]);
		if(x.se==a[k][b[k]]){
			++b[k],++b[x.se];
			x.fi=max(x.fi,f[k])+1;
			f[k]=x.fi,que.push(P(f[k],k));
			f[x.se]=x.fi,que.push(P(f[k],x.se));
		}
	}
	if(res!=n*(n-1))	cout<<-1<<endl;
	else	cout<<ans<<endl;
	return 0;
}
