func_code_string: #include <bits/stdc++.h>   using namespace std;   int N, ans[(int)20 + 7][(int)20 + 7], a[500];   set<pair<int, int> > st;   map<int, int> mp;   int main() {     ios::sync_with_stdio(false);     cin >> N;     for (int i = 0; i < N * N; i++) {       cin >> a[i];       mp[a[i]]++;     }     int idx = -1;     map<int, int>::iterator itt = mp.begin();     while (itt != mp.end()) {       st.insert({itt->second, itt->first});       itt++;     }     memset(ans, -1, sizeof ans);     for (int i = 0; i < N; i++) {       for (int j = 0; j < N; j++) {         if (ans[i][j] != -1) continue;         if (!st.size()) return cout <<  NO , 0;         if (N % 2 && i == N / 2 || j == N / 2) {           continue;         }         set<pair<int, int> >::iterator it = st.lower_bound({4, -1});         ;         int c = (*it).first, n = (*it).second;         if (it == st.end()) return cout <<  NO , 0;         st.erase(it);         c -= 4;         if (c < 0) return cout <<  NO , 0;         ans[i][j] = n;         ans[i][N - j - 1] = n;         ans[N - i - 1][j] = n;         ans[N - i - 1][N - j - 1] = n;         if (c) st.insert({c, n});       }     }     for (int i = 0; i < N; i++) {       for (int j = 0; j < N; j++) {         if (ans[i][j] != -1) continue;         if (N % 2 && i == N / 2 && j == N / 2) continue;         if (N % 2 && i == N / 2) {           set<pair<int, int> >::iterator it = st.lower_bound({2, -1});           if (it == st.end()) return cout <<  NO , 0;           st.erase(it);           int c = (*it).first, n = (*it).second;           c -= 2;           if (c < 0) return cout <<  NO , 0;           ans[i][j] = n;           ans[i][N - j - 1] = n;           if (c) st.insert({c, n});         } else if (N % 2 && j == N / 2) {           set<pair<int, int> >::iterator it = st.lower_bound({2, -1});           ;           if (it == st.end()) return cout <<  NO , 0;           st.erase(it);           int c = (*it).first, n = (*it).second;           c -= 2;           if (c < 0) return cout <<  NO , 0;           ans[i][j] = n;           ans[N - i - 1][j] = n;           if (c) st.insert({c, n});         }       }     }     if (N % 2) {       ans[N / 2][N / 2] = (*st.begin()).second;     }     cout <<  YES  << endl;     for (int i = 0; i < N; i++, cout << endl)       for (int j = 0; j < N; j++) cout << ans[i][j] <<    ;     return 0;   }   