#include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; #define rep(i, n) for(int i = 0; i < (n); i++) template using vi = vector; template using vii = vector>; template using viii = vector>; using P = pair; void chmin(ll & x, ll y) { x = min(x, y); } int main() { int n; cin >> n; vii a(n, vi(n)); rep(i, n) rep(j, n) cin >> a[i][j]; bool ok = true; rep(i, n) rep(j, n) { if (a[i][j] != a[j][i]) ok = false; } //結合律 rep(i, n) rep(j, n) rep(k, n) { if (a[a[i][j]][k] != a[i][a[j][k]]) ok = false; } //単位律 vi check(n); rep(i, n){ bool t = true; rep(j, n) { if (a[i][j] == j && a[j][i] == j) continue; t = false; } check[i] = t; } //逆元律 bool ok2 = false; rep(i, n) { if (!check[i]) continue; int cnt = 0; rep(j, n) { rep(k, n) { if (a[j][k] == i) { cnt++; break; } } } if (cnt == n) ok2 = true; } if (ok && ok2) cout << "Yes" << endl; else cout << "No" << endl; return 0; }