#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
int n, g[21][21], a, t[maxn];
bool ans = true;
int find(int times) {
  int i = 1;
  bool finded = false;
  for (; i <= 1000; ++i)
    if (t[i] >= times) {
      finded = true;
      break;
    }
  if (!finded) ans = false;
  t[i] -= times;
  return i;
}
int main() {
  cin >> n;
  for (int i = 0; i < n * n; i++) {
    cin >> a;
    t[a]++;
  }
  for (int i = 1; i <= n / 2; i++)
    for (int j = 1; j <= n / 2; j++)
      g[i][j] = g[n - i + 1][j] = g[i][n - j + 1] = g[n - i + 1][n - j + 1] =
          find(4);
  if (ans) {
    if (n & 1) {
      for (int i = 1; i <= n / 2; i++)
        if (i != (n + 1) / 2) {
          g[i][(n + 1) / 2] = g[n - i + 1][(n + 1) / 2] = find(2);
          g[(n + 1) / 2][i] = g[(n + 1) / 2][n - i + 1] = find(2);
        }
      g[(n + 1) / 2][(n + 1) / 2] = find(1);
    }
    if (ans) {
      cout << "YES" << endl;
      for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++) cout << g[i][j] << " \n"[j == n];
    }
  }
  if (!ans) cout << "NO" << endl;
  return 0;
}
