/*
█████████───███─────────███───███─────────████████████───███████████████───████████████───████████████───█████████───────
█████████───███─────────███───███─────────████████████───███████████████───████████████───████████████───█████████───────
█████████───███─────────███───███─────────████████████───███████████████───████████████───████████████───█████████───────
███─────────███─────────███───███─────────███──────███───███───███───███───███──────███───███──────███───███─────────────
███─────────███─────────███───███─────────███──────███───███───███───███───███──────███───███──────███───███─────────────
███─────────███─────────███───███─────────███──────███───███───███───███───███──────███───███──────███───███─────────────
█████████──────███───███──────███─────────████████████───███───███───███───████████████───███──────███───█████████───────
█████████──────███───███──────███─────────████████████───███───███───███───████████████───███──────███───█████████───────
█████████──────███───███──────███─────────████████████───███───███───███───████████████───███──────███───█████████───────
███────────────███───███──────███─────────███──────███───███───███───███───███────────────███──────███─────────███───────
███────────────███───███──────███─────────███──────███───███───███───███───███────────────███──────███─────────███───────
███────────────███───███──────███─────────███──────███───███───███───███───███────────────███──────███─────────███───────
█████████─────────███─────────█████████───███──────███───███───███───███───███────────────████████████───█████████───────
█████████─────────███─────────█████████───███──────███───███───███───███───███────────────████████████───█████████───────
█████████─────────███─────────█████████───███──────███───███───███───███───███────────────████████████───█████████───────
*/
/**

**/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define fori(n) for ( int i = 0; i < (n);i++)
#define forj(n) for ( int j = 0; j < (n);j++)
#define fork(n) for ( int k = 0; k < (n);k++)
#define forghj(n) for ( int ghj = 0; ghj < (n);ghj++)
#define fori1(n) for ( int i = (n)-1; i >= 0;i--)
#define all(vector) (vector).begin(),(vector).end()
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
#define INF 1e9+7
#define EPS 1e-7
#pragma GCC optimize("Ofast")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,popcnt,abm,mmx,tune=native")
#pragma GCC optimize("fast-math")
#pragma GCC optimize "-O3"

/*
string getNum(int x) {
    string ans;
    if (x < 10) {
        ans.pb('-');
        ans.pb('0' + x);
        return ans;
    }
    ans.pb(x / 10 + '0');
    ans.pb(x % 10 + '0');
    return ans;
}
void addSex(vector < string > &s) {
    fori(s.size()) s[i] += "-";
}
vector < int > monthDay;
void visok(int i) {
    monthDay = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if (i == 1) {
        /// больше дней
        monthDay[1] = 29;
    } else {
        monthDay[1] = 28;
    }
}
vector < string > build(int kolday, int weekStart) { /// 0---7
    vector < string > ans;
    ans.resize(7);
}
int main() {
    int d, gavno, k;
    cin >> d >> gavno >> k;
    visok(gavno);
    /// d - день недели, с которого начинается весь пиздец
    /// k - количество месяцев в одной строке
    d--;
}
*/
vector < int > nxt;
vector < vector < int > > a;
int main() {
    int n;
    cin >> n;
    nxt.resize(n);
    a.resize(n);
    fori(n) {
        a[i].resize(n - 1);
        forj(n - 1) cin >> a[i][j];
        forj(n - 1) a[i][j]--;
    }
    queue < int > check;
    fori(n) check.push(i);
    vector < int > haveinpast; /// встречался ли такой элемент нам в прошлом
    haveinpast.resize(n);
    int t = 0;
    int ans = 0;
    int cur;
    int kolok = 0;
    int para = 0;
    int kolkeks = 0;
    while (true) {
        if (kolok == n) break;
        //cout << t << " ";
        kolkeks = 0;
        t++;
        ans++;
        int m = check.size(); /// какого надо посмотреть
        fori(m) {
            cur = check.front();
            check.pop();
            if (haveinpast[cur] == t) continue;
            if (nxt[cur] == n - 1) continue;
            haveinpast[cur] = t;
            para = a[cur][nxt[cur]];
            if (haveinpast[para] == t) continue;
            if (a[para][nxt[para]] == cur) {
                haveinpast[para] = t;
                check.push(para);
                check.push(cur);
                nxt[para]++;
                nxt[cur]++;
                if (nxt[para] == n - 1) kolok++;
                if (nxt[cur] == n - 1) kolok++;
                kolkeks++;
            }
        }
        if (kolkeks == 0) {
            cout << -1;
            return 0;
        }
    }
    //cout << "\nans = " << ans;
    cout << ans;
}












Measured memory_bytes: 4224