#include <bits/stdc++.h>
using namespace std;
priority_queue<int, vector<int>, greater<int> > Q;
vector<int> V;
int n;
int a[40 * 40];
int b[40 * 40];
int gra[40][40];
int main(void) {
  cin >> n;
  for (int i = 1; i <= n * n; i++) cin >> a[i];
  sort(a + 1, a + 1 + n * n);
  bool f = true;
  if (n == 1) {
    cout << "YES\n" << a[1] << endl;
    return 0;
  }
  if (n % 2 == 0) {
    for (int i = 1; i <= n * n; i += 4) {
      if (a[i] == a[i + 1] && a[i + 2] == a[i + 3] && a[i + 1] == a[i + 2]) {
        V.push_back(a[i]);
        continue;
      } else {
        f = false;
        break;
      }
    }
    if (!f)
      cout << "NO\n";
    else {
      cout << "YES\n";
      int p = 0;
      for (int i = 1; i <= n / 2; i++)
        for (int j = 1; j <= n / 2; j++)
          gra[i][j] = gra[n - i + 1][j] = gra[i][n - j + 1] =
              gra[n - i + 1][n - j + 1] = V[p++];
      for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
          cout << gra[i][j] << " ";
        }
        cout << endl;
      }
    }
  } else {
    int rem = 2 * (n / 2);
    int dui = (n * n - 1 - rem * 2) / 4;
    for (int i = 1; i <= n * n;) {
      if (V.size() == dui) break;
      if (a[i] == a[i + 1] && a[i + 2] == a[i + 3] && a[i + 1] == a[i + 2]) {
        V.push_back(a[i]);
        a[i] = a[i + 1] = a[i + 2] = a[i + 3] = 0;
        i += 4;
        continue;
      } else {
        i++;
      }
    }
    int cnt = 0;
    int core = 0;
    vector<int> X;
    if (V.size() == dui) {
      for (int i = 1; i <= n * n; i++) {
        if (a[i]) b[++cnt] = a[i];
      }
      sort(b + 1, b + 1 + cnt);
      for (int i = 1; i <= cnt;) {
        if (b[i] == b[i + 1]) {
          X.push_back(b[i]);
          i += 2;
          continue;
        } else {
          core = b[i];
          i++;
        }
      }
      if (X.size() != rem) f = false;
    } else {
      f = false;
    }
    if (!f)
      cout << "NO\n";
    else {
      int p = 0;
      for (int i = 1; i <= n / 2; i++)
        for (int j = 1; j <= n / 2; j++)
          gra[i][j] = gra[n - i + 1][j] = gra[i][n - j + 1] =
              gra[n - i + 1][n - j + 1] = V[p++];
      p = 0;
      for (int i = 1; i <= n / 2; i++)
        gra[n / 2 + 1][i] = gra[n / 2 + 1][n - i + 1] = X[p++];
      for (int i = 1; i <= n / 2; i++)
        gra[i][n / 2 + 1] = gra[n - i + 1][n / 2 + 1] = X[p++];
      gra[n / 2 + 1][n / 2 + 1] = core;
      cout << "YES\n";
      for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
          cout << gra[i][j] << " ";
        }
        cout << endl;
      }
    }
  }
  return 0;
}
