import std.stdio; import std.string; import std.conv; void main(){ int n = readln.chomp.to!int; int[][] m; foreach(_; 0 .. n){ m ~= readln.split.to!(int[]); } writeln(c(m) && e(m) ? "Yes" : "No"); } bool c(int[][] m){ bool r = true; foreach(n0; 0 .. m.length){ foreach(n1; 0 .. m.length){ foreach(n2; 0 .. m.length){ r = r && (m[m[n0][n1]][n2] == m[n0][m[n1][n2]]); } } } return r; } bool e(int[][] m){ foreach(x; 0 .. m.length){ bool r = true; foreach(n; 0 .. m.length){ r = r && (m[n][x] == n && m[x][n] == n); } if(!r) continue; foreach(n; 0 .. m.length){ r = false; foreach(i; 0 .. m.length){ if(m[n][i] == x && m[i][n] == x){ r = true; break; } } if(!r) break; } if(r) return true; } return false; }