N = gets.to_i X = N.times.map { gets.split.map(&:to_i) } def f N.times do |n0| N.times do |n1| N.times do |n2| v1 = X[n0][n1] v2 = X[v1][n2] v3 = X[n1][n2] v4 = X[n0][v3] return false if v2 != v4 end end end true end def check(e) cond1 = true N.times do |n| cond1 &= (X[n][e] == n) cond1 &= (X[e][n] == n) end cond2 = true N.times do |n| res = false N.times do |i| res |= ((X[n][i] == e) && (X[i][n] == e)) end cond2 &= res end cond1 && cond2 end if not f() puts 'No' exit end N.times do |e| if check(e) puts 'Yes' exit end end puts 'No'