#include<bits/stdc++.h>
using namespace std;
struct node{
	int x,y,step;
};
int n,cnt,a[1001][1001],ind[1001][1001],ans,tot;
vector <node> v[1001][1001];
queue<node> Q;
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++) {
		for(int j=1; j<n-1; j++) {
			int x=i,y=a[i][j],xx=i,yy=a[i][j+1];
			if(x>y)swap(x,y);
			if(xx>yy)swap(xx,yy);
			v[x][y].push_back((node)<%xx,yy%>);
			ind[xx][yy]++;
		}
	}
	for(int i=1; i<=n; i++) 
		for(int j=i+1; j<=n; j++)
			if(!ind[i][j])Q.push((node)<%i,j,1%>),tot++;
	while(!Q.empty()) {
		node now=Q.front();Q.pop();
		int x=now.x,y=now.y;
		for(int i=0;i<v[x][y].size();i++){
			int xx=v[x][y][i].x,yy=v[x][y][i].y;
			ind[xx][yy]--;
			if(!ind[xx][yy])Q.push((node)<%xx,yy,now.step+1%>),tot++;
		}
		cnt=max(cnt,now.step);
	}
	if(tot==(n-1)*n/2)printf("%d",cnt);
	else  printf("-1");
	return 0;
}