#ifndef ONLINE_JUDGE #define _GLIBCXX_DEBUG #endif #include #include #include using namespace std; using namespace atcoder; using ll = long long; using mint = modint998244353; //using mint = modint1000000007; #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define repu(i, s, t) for (int i = (int)(s); i < (int)(t); i++) #define repd(i, s, t) for (int i = (int)(s)-1; i >= (int)(t); i--) #define all(v) v.begin(), v.end() void _u() { cerr << endl; } template void _u(H&& h, T&&... t) { cerr << h << ", "; _u(move(t)...); } #define U(...) { cerr << #__VA_ARGS__ << ": "; _u(__VA_ARGS__); } template bool chmax(T &a, const T b) { if(a >= b) return false; a = b; return true; } template bool chmin(T &a, const T b) { if(a <= b) return false; a = b; return true; } template istream& operator>>(istream &in, vector &a) { for(T &x: a) in >> x; return in; } template ostream& operator<<(ostream &out, const vector &a) { for(const T &x: a) out << x << ' '; return out; } const int di[] = {1, 0, -1, 0, 1, 1, -1, -1, 0}; const int dj[] = {0, 1, 0, -1, -1, 1, 1, -1, 0}; bool can_solve(vector &v, int m) { int n = v.size(); dsu uf(n); rep(i, n) uf.merge(i, v[i]); int pi, pj; rep(i, n) if(v[i] == 0) { pi = i / m, pj = i % m; } return ((n - uf.groups().size())&1) == ((pi + pj)&1); } ll calc(vector &v, vector> &a) { int n = v.size(), m = a.size(); ll res = 0; rep(i, n) { int pi = i / m, pj = i % m; res += ll(a[pi][pj]) * v[i]; } return res; } int main() { int n; cin >> n; vector> a(n, vector(n)); cin >> a; if(n <= 3) { vector p(n*n); iota(all(p), 0); map> res; do { if(!can_solve(p, n)) continue; auto score = calc(p, a); if(res.count(score)) { cout << "Yes" << endl; auto q = res[score]; rep(i, n) { rep(j, n) cout << p[i*n+j] << " "; cout << '\n'; } rep(i, n) { rep(j, n) cout << q[i*n+j] << " "; cout << '\n'; } return 0; } res[score] = p; } while(next_permutation(all(p))); cout << "No" << endl; } else { cout << "Yes" << endl; vector p(14); iota(all(p), 0); map> res; random_device rd; mt19937 rng(rd()); while(1) { shuffle(all(p), rng); if(!can_solve(p, n)) continue; ll score = calc(p, a); if(res.count(score) && res[score] != p) { auto q = res[score]; rep(i, n) { rep(j, n) { if(i*n+j < 14) cout << p[i*n+j] << " "; else cout << i*n+j << " "; } cout << '\n'; } rep(i, n) { rep(j, n) { if(i*n+j < 14) cout << q[i*n+j] << " "; else cout << i*n+j << " "; } cout << '\n'; } return 0; } res[score] = p; } } return 0; }