#include <bits/stdc++.h>
using namespace std;
map<int, int> cnts;
int mat[20][20];
int main() {
  int n, a;
  scanf("%d", &n);
  for (int i = 0; i < n * n; i++) {
    scanf("%d", &a);
    cnts[a]++;
  }
  bool checked = true;
  int qaq[4] = {0, 0, 0, 0};
  for (auto p : cnts) qaq[p.second % 4]++;
  if (n & 1) {
    if (qaq[3] > 1)
      checked = false;
    else if (qaq[3] == 1)
      qaq[2]++, qaq[1]++;
    if (qaq[1] != 1) checked = false;
    if (qaq[2] > n - 1) checked = false;
    if (qaq[2] % 2 != 0) checked = false;
  } else {
    if (qaq[0] != cnts.size()) checked = false;
  }
  if (!checked) {
    printf("NO\n");
  } else {
    printf("YES\n");
    for (auto &p : cnts) {
      if (p.second & 1) {
        mat[n / 2][n / 2] = p.first;
        p.second--;
      }
      for (int i = 0; i < n / 2 && p.second > 2; i++) {
        for (int j = 0; j < n / 2 && p.second > 2; j++) {
          if (mat[i][j] == 0) {
            mat[i][j] = p.first, p.second--;
            mat[i][n - j - 1] = p.first, p.second--;
            mat[n - i - 1][j] = p.first, p.second--;
            mat[n - i - 1][n - j - 1] = p.first, p.second--;
          }
        }
      }
    }
    for (auto &p : cnts) {
      for (int i = 0; i < n / 2 && p.second; i++) {
        if (mat[i][n / 2] == 0) {
          mat[i][n / 2] = p.first, p.second--;
          mat[n - 1 - i][n / 2] = p.first, p.second--;
        }
      }
      for (int i = 0; i < n / 2 && p.second; i++) {
        if (mat[n / 2][i] == 0) {
          mat[n / 2][i] = p.first, p.second--;
          mat[n / 2][n - 1 - i] = p.first, p.second--;
        }
      }
    }
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j++) printf("%d ", mat[i][j]);
      printf("\n");
    }
  }
  return 0;
}
