#include <bits/stdc++.h>
using namespace std;
int a[50][50], d[1005], f[1005], b, i, j, s, p, n, k, N, x, y, k1;
set<int> st;
set<pair<int, int>> sq;
int main() {
  cin >> n;
  N = n * n;
  for (i = 0; i < N; i++) cin >> d[i], f[d[i]]++, st.insert(d[i]);
  for (auto i : st) {
    k += f[i] % 2;
    if (f[i] % 2) k1 = i;
    if (f[i] % 2) f[i]--;
    if (n % 2 && k == 2) return cout << "NO", 0;
    if (n % 2 == 0 && k == 1) return cout << "NO", 0;
    if (f[i] > 0) sq.insert({f[i], i});
  }
  for (i = 1; i <= n / 2; i++) {
    if (i != n - i + 1) {
      x = (*(--sq.end())).first;
      y = (*(--sq.end())).second;
      a[i][i] = y;
      a[i][n - i + 1] = y;
      a[n - i + 1][i] = y;
      a[n - i + 1][n - i + 1] = y;
      if (sq.size()) sq.erase({x, y});
      x -= 4;
      if (x < 0) return cout << "NO", 0;
      if (x) sq.insert({x, y});
    }
  }
  if (k1) a[n / 2 + 1][n / 2 + 1] = k1;
  for (i = 1; i <= n / 2; i++) {
    for (j = 1; j <= n / 2 - i; j++) {
      if (!a[i + j][i]) {
        x = (*(--sq.end())).first;
        y = (*(--sq.end())).second;
        if (sq.size()) sq.erase({x, y});
        a[i + j][i] = y;
        a[n - i + 1 - j][i] = y;
        a[i + j][n - i + 1] = y;
        a[n - i + 1 - j][n - i + 1] = y;
        x -= 4;
        if (x < 0) return cout << "NO", 0;
        if (x) sq.insert({x, y});
      }
      if (!a[i][i + j]) {
        x = (*(--sq.end())).first;
        y = (*(--sq.end())).second;
        if (sq.size()) sq.erase({x, y});
        a[i][i + j] = y;
        a[n - i + 1][i + j] = y;
        a[i][n - i + 1 - j] = y;
        a[n - i + 1][n - i + 1 - j] = y;
        x -= 4;
        if (x < 0) return cout << "NO", 0;
        if (x) sq.insert({x, y});
      }
    }
  }
  if (n % 2) {
    for (i = 1; i <= n / 2; i++) {
      if (!a[n / 2 + 1 + i][n / 2 + 1] && !a[n / 2 + 1 - i][n / 2 + 1]) {
        x = (*(--sq.end())).first;
        y = (*(--sq.end())).second;
        if (sq.size()) sq.erase({x, y});
        a[n / 2 + 1 + i][n / 2 + 1] = y;
        a[n / 2 + 1 - i][n / 2 + 1] = y;
        x -= 2;
        if (x < 0) return cout << "NO", 0;
        if (x) sq.insert({x, y});
      }
      if (!a[n / 2 + 1][n / 2 + 1 + i] && !a[n / 2 + 1][n / 2 + 1 - i]) {
        x = (*(--sq.end())).first;
        y = (*(--sq.end())).second;
        if (sq.size()) sq.erase({x, y});
        a[n / 2 + 1][n / 2 + 1 + i] = y;
        a[n / 2 + 1][n / 2 + 1 - i] = y;
        x -= 2;
        if (x < 0) return cout << "NO", 0;
        if (x) sq.insert({x, y});
      }
    }
  }
  cout << "YES" << endl;
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= n; j++) {
      cout << a[i][j] << ' ';
    }
    cout << endl;
  }
}
