#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
long long lcm(long long a, long long b) { return a * (b / gcd(a, b)); }
long long n, aux, cruz, i, j;
long long a[401];
map<long long, long long> mapa;
long long res[21][21];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 0; i < n * n; i++) {
    cin >> a[i];
    mapa[a[i]]++;
  }
  if (!(n % 2)) {
    for (auto x : mapa) {
      if (x.second % 4) {
        cout << "NO";
        return 0;
      }
    }
  } else {
    long long c = 0;
    for (auto x : mapa) {
      if (aux == (n * n) - ((n * 2) - 1)) {
        while (x.second >= 2) {
          if (!(x.second % 2)) {
            cruz += x.second;
            x.second = 0;
          }
          c += x.second % 2;
          x.second -= x.second % 2;
        }
        if (!(x.second % 2)) {
          cruz += x.second;
          x.second = 0;
        }
        c += (x.second % 2);
        x.second -= x.second % 2;
      } else {
        while (x.second >= 4) {
          if (aux < (n * n) - ((n * 2) - 1)) {
            aux += 4;
            x.second -= 4;
          } else {
            if (!(x.second % 2)) {
              cruz += x.second;
              x.second = 0;
            }
            c += x.second % 2;
            x.second -= x.second % 2;
          }
        }
        while (x.second >= 2) {
          if (!(x.second % 2)) {
            cruz += x.second;
            x.second = 0;
          }
          c += x.second % 2;
          x.second -= x.second % 2;
        }
        if (!(x.second % 2)) {
          cruz += x.second;
          x.second = 0;
        }
        c += (x.second % 2);
        x.second -= x.second % 2;
      }
    }
    if (!(aux == (n * n) - ((n * 2) - 1) && cruz == (n * 2) - 2 && c == 1)) {
      cout << "NO";
      return 0;
    }
  }
  cout << "YES" << endl;
  if (!(n % 2)) {
    i = 0;
    j = 0;
    for (auto x : mapa) {
      if (x.second >= 4 && i <= (n / 2) && j <= (n / 2)) {
        int ndeah = x.second / 4;
        for (int k = 0; k < ndeah && i <= (n / 2) && j <= (n / 2); k++) {
          res[i][j] = x.first;
          res[i][n - 1 - j] = x.first;
          res[n - 1 - i][j] = x.first;
          res[n - 1 - i][n - 1 - j] = x.first;
          j = (j + 1) % (n / 2);
          if (j == 0) i = (i + 1) % (n / 2);
          x.second -= 4;
        }
      }
    }
  } else {
    i = 0;
    j = 0;
    for (auto x : mapa) {
      if (x.second >= 4 && i < (n / 2) && j < (n / 2)) {
        int ndeah = x.second / 4;
        for (int k = 0; k < ndeah && i < (n / 2) && j < (n / 2); k++) {
          res[i][j] = x.first;
          res[i][n - 1 - j] = x.first;
          res[n - 1 - i][j] = x.first;
          res[n - 1 - i][n - 1 - j] = x.first;
          j = (j + 1) % (n / 2);
          if (j == 0) i++;
          mapa[x.first] = x.second - 4;
          x.second -= 4;
        }
      }
    }
    aux = 0;
    for (auto x : mapa) {
      if (x.second >= 2) {
        int ndeah = x.second / 2;
        for (int k = 0; k < ndeah && aux < (n / 2); k++) {
          res[aux][n / 2] = x.first;
          res[n - 1 - aux][n / 2] = x.first;
          aux++;
          mapa[x.first] = x.second - 2;
          x.second -= 2;
        }
      }
    }
    aux = 0;
    for (auto x : mapa) {
      if (x.second >= 2) {
        int ndeah = x.second / 2;
        for (int k = 0; k < ndeah && aux < (n / 2); k++) {
          res[n / 2][aux] = x.first;
          res[n / 2][n - 1 - aux] = x.first;
          aux++;
          mapa[x.first] = x.second - 2;
          x.second -= 2;
        }
      }
    }
    for (auto x : mapa) {
      if (x.second) res[n / 2][n / 2] = x.first;
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      cout << res[i][j] << " ";
    }
    cout << endl;
  }
}
