nn = gets.to_i
# 各選手の最近の試合配列
r_ar = []
aa =
  nn.times.map do
    arr = gets.split.map(&:to_i)
    r_ar << arr.shift
    arr
  end

day = 0
while r_ar.compact.size > 0 do
  pop_ar = []
  0.upto(nn-1-1) do |i|
    # 次の試合予定ないならスキップ
    next if r_ar[i].nil?
    # 試合する
    if i+1 < r_ar[i] && i+1 == r_ar[r_ar[i]-1]
      pop_ar<<i<<r_ar[i]-1
    end
  end
  # 循環してるならできない
  if pop_ar.size==0
    puts -1
    exit
  end

  #puts pop_ar.to_s#d
  # 試合した人は次の試合予定を入れる
  pop_ar.each do |n_i|
    r_ar[n_i] = aa[n_i].shift
  end

  # 1日経過
  day+=1
end
puts day
