#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
int n, i, j, k, t, n1, n2, n3, a[25][25];
struct node {
  int num, k1, k2, k3;
} x[1005];
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n;
  if (n % 2)
    n1 = (n - 1) * (n - 1), n2 = 2 * (n - 1), n3 = 1;
  else
    n1 = n * n;
  for (i = 0; i < n * n; i++) cin >> t, x[t].num++;
  for (i = 1; i <= 1000; i++)
    while (x[i].num >= 4 && n1) x[i].num -= 4, x[i].k1++, n1 -= 4;
  if (n % 2) {
    for (i = 1; i <= 1000; i++)
      while (x[i].num >= 2 && n2) x[i].num -= 2, x[i].k2++, n2 -= 2;
    for (i = 1; i <= 1000; i++)
      while (x[i].num && n3) x[i].num--, x[i].k3++, n3--;
  }
  if (n1 || n2 || n3)
    cout << "no" << endl, exit(0);
  else
    cout << "yes" << endl;
  for (i = 0; i <= (n - 1) / 2; i++)
    for (j = 0; j <= (n - 1) / 2; j++)
      for (k = 1; k <= 1000; k++) {
        if (i == n / 2 && j == n / 2) {
          if (x[k].k3) {
            a[i][j] = k;
            x[k].k3--;
            break;
          }
        } else if (i == n / 2) {
          if (x[k].k2) {
            a[i][j] = a[i][n - 1 - j] = k;
            x[k].k2--;
            break;
          }
        } else if (j == n / 2) {
          if (x[k].k2) {
            a[i][j] = a[n - 1 - i][j] = k;
            x[k].k2--;
            break;
          }
        } else if (x[k].k1) {
          a[i][j] = a[n - 1 - i][j] = a[i][n - 1 - j] =
              a[n - 1 - i][n - 1 - j] = k;
          x[k].k1--;
          break;
        }
      }
  for (i = 0; i < n; i++) {
    for (j = 0; j < n; j++) cout << a[i][j] << " ";
    cout << endl;
  }
  return 0;
}
