Problem:
Score : 500 points

Problem Statement

N players will participate in a tennis tournament. We will call them Player 1, Player 2, \ldots, Player N.

The tournament is round-robin format, and there will be N(N-1)/2 matches in total.
Is it possible to schedule these matches so that all of the following conditions are satisfied? If the answer is yes, also find the minimum number of days required.

Each player plays at most one matches in a day.

Each player i (1 \leq i \leq N) plays one match against Player A_{i, 1}, A_{i, 2}, \ldots, A_{i, N-1} in this order.

Constraints

3 \leq N \leq 1000

1 \leq A_{i, j} \leq N

A_{i, j} \neq i

A_{i, 1}, A_{i, 2}, \ldots, A_{i, N-1} are all different.

Input

Input is given from Standard Input in the following format:

N
A_{1, 1} A_{1, 2} \ldots A_{1, N-1}
A_{2, 1} A_{2, 2} \ldots A_{2, N-1}
:
A_{N, 1} A_{N, 2} \ldots A_{N, N-1}

Output

If it is possible to schedule all the matches so that all of the conditions are satisfied, print the minimum number of days required; if it is impossible, print -1.

Sample Input 1

3
2 3
1 3
1 2

Sample Output 1

3

All the conditions can be satisfied if the matches are scheduled for three days as follows:

Day 1: Player 1 vs Player 2

Day 2: Player 1 vs Player 3

Day 3: Player 2 vs Player 3

This is the minimum number of days required.

Sample Input 2

4
2 3 4
1 3 4
4 1 2
3 1 2

Sample Output 2

4

All the conditions can be satisfied if the matches are scheduled for four days as follows:

Day 1: Player 1 vs Player 2, Player 3 vs Player 4

Day 2: Player 1 vs Player 3

Day 3: Player 1 vs Player 4, Player 2 vs Player 3

Day 4: Player 2 vs Player 4

This is the minimum number of days required.

Sample Input 3

3
2 3
3 1
1 2

Sample Output 3

-1

Any scheduling of the matches violates some condition.

Solution in C# (Mono 4.6.2.0) (judge verdict: Wrong Answer)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class Program
{
    static void Main(string[] args)
    {
            // 入力
            string[] sS = System.Console.ReadLine().Trim().Split(' ');
            int iN = int.Parse(sS[0]);
            List<List<int>> lstInp = new List<List<int>>();
            for (int i = 0; i < iN; i++)
            {
                sS = System.Console.ReadLine().Trim().Split(' ');
                List<int> oneRow = new List<int>();
                for (int j = 0; j < sS.Length; j++) { oneRow.Add(int.Parse(sS[j]) - 1); }       // Noは0始まりにして1個づつ前へ
                lstInp.Add(oneRow);
            }

            System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
            sw.Start();

            // 解析
            int iOut = 0;
            //List<List<int>> lstDbg = new List<List<int>>();         // 対戦ログ
            while (true)
            {
                List<int> oneDay = new List<int>();                 // ある日の出場者
                for (int i = 0; i < lstInp.Count; i++)
                {
                    if (lstInp[i].Count == 0) { continue; }         // ある人の対戦情報がなければ次
                    int iVs1 = i;                                   // ある人
                    int iVs2 = lstInp[i][0];                        // 対戦者
                    if (oneDay.Contains(iVs1)) { continue; }        // ある人は今日は出場済みで次
                    if (oneDay.Contains(iVs2)) { continue; }        // 対戦者は今日は出場済みで次
                    if (lstInp[iVs2][0] == iVs1)                    // 対戦者の予定がある人か？
                    {
                        lstInp[iVs1].RemoveAt(0);                   // ある人の対戦情報を消化
                        lstInp[iVs2].RemoveAt(0);                   // 対戦者の対戦情報を消化
                        oneDay.Add(iVs1);                           // ある人は今日は出場済み
                        oneDay.Add(iVs2);                           // ある人は今日は出場済み
                    }
                }
                if (oneDay.Count == 0) { break; }                   // ある日の対戦が行われなければ終了
                //lstDbg.Add(oneDay);                                 // 対戦ログ
                iOut += 1;                                          // 開催日+1
            }
            if (iOut == 0) { iOut = -1; }                           // 開催日0なら-1

            // 出力
            System.Console.WriteLine("{0}", iOut.ToString().Trim());

            //DispDebug(lstDbg);
            sw.Stop();
#if DEBUG
            Console.WriteLine();
            Console.WriteLine("{0}", sw.Elapsed.ToString());
            Console.WriteLine("続行するには何かキーを押してください．．．");
            Console.ReadKey();
#endif
    }

        // 連結確認
        private static void DispDebug(List<List<int>> lstDbg)
        {
            for (int i = 0; i < lstDbg.Count; i++)
            {
                string sOut = "";
                for (int j = 0; j < lstDbg[i].Count; j++)
                {
                    sOut += (lstDbg[i][j] + 1).ToString() + " ";
                }
                System.Console.WriteLine("{0} :{1}", (i + 1).ToString("00").Trim(), sOut.ToString().Trim());
            }

        }

}