#include <bits/stdc++.h>
using namespace std;
map<int, int> mp;
int t;
const int maxn = 25;
int ans[maxn][maxn];
vector<pair<int, pair<int, int> > > Ceil;
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n * n; i++) {
    scanf("%d", &t);
    mp[t]++;
  }
  for (int i = 0; i < (n + 1) / 2; i++)
    for (int j = 0; j < (n + 1) / 2; j++) {
      if (i != n - 1 - i && j != n - 1 - j)
        Ceil.push_back({4, {i, j}});
      else if (i != n - 1 - i || j != n - 1 - j)
        Ceil.push_back({2, {i, j}});
      else
        Ceil.push_back({1, {i, j}});
    }
  int number[3] = {4, 2, 1};
  for (int i = 0; i < 3; i++) {
    int temp = number[i];
    for (int j = 0; j < Ceil.size(); j++) {
      auto c = Ceil[j];
      if (c.first != temp) continue;
      int x = c.second.first;
      int y = c.second.second;
      auto it = mp.begin();
      for (; it != mp.end(); it++) {
        if (it->second >= c.first) {
          it->second -= c.first;
          ans[x][y] = ans[n - x - 1][y] = ans[n - x - 1][n - y - 1] =
              ans[x][n - y - 1] = it->first;
          break;
        }
      }
      if (it == mp.end()) {
        printf("NO\n");
        return 0;
      }
    }
  }
  printf("YES\n");
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      printf("%d ", ans[i][j]);
    }
    printf("\n");
  }
  return 0;
}
