#include using namespace std; #include #define rep(i, l, r) for (int i = (int)(l); i<(int)(r); i++) #define ll long long #define siz(x) (int)x.size() #define all(x) (x).begin(), (x).end() int main() { int N; cin >> N; vector A(N*N); rep(i, 0, N*N) cin >> A[i]; auto score = [&](vector P) { ll ret = 0; rep(i, 0, siz(P)) { ret += A[i] * P[i]; } return ret; }; auto isok = [&](vector P) { int x = 0, y = 0; rep(i, 0, siz(P)) { if (P[i] == 0) { x = i/N+i%N; } } rep(i, 0, siz(P)) rep(j, i+1, siz(P)) { if (P[i] > P[j]) y++; } return x%2 == y%2; }; auto print = [&](vector P) { vector> ans(N, vector(N)); rep(i, 0, N) rep(j, 0, N) ans[i][j] = i*N+j; rep(i, 0, siz(P)) ans[i/N][i%N] = P[i]; rep(i, 0, N) { rep(j, 0, N) cout << ans[i][j] << " "; cout << endl; } }; if (N <= 3) { vector P(N*N); iota(all(P), 0); map> mp; do { if (isok(P)) { int sc = score(P); if (mp.contains(sc) and mp[sc] != P) { cout << "Yes" << endl; print(mp[sc]); print(P); return 0; } mp[sc] = P; } }while(next_permutation(all(P))); cout << "No" << endl; } else { map> mp; vector P(16); iota(all(P), 0); random_device seed; mt19937 rnd(seed()); while(true) { shuffle(all(P), rnd); if (isok(P)) { int sc = score(P); if (mp.contains(sc) and mp[sc] != P) { cout << "Yes" << endl; print(mp[sc]); print(P); return 0; } mp[sc] = P; } } } }