#include <bits/stdc++.h>
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n;
  cin >> n;
  if (n % 2 == 0) {
    vector<int> f;
    map<int, int> m;
    for (int i = 0; i < n * n; ++i) {
      int x;
      cin >> x;
      m[x]++;
      if (m[x] == 4) {
        f.push_back(x);
        m[x] = 0;
      }
    }
    if (f.size() != (n * n) / 4) {
      cout << "NO"
           << "\n";
      return 0;
    } else {
      cout << "YES"
           << "\n";
      int idx = 0;
      int ar[n + 1][n + 1];
      for (int i = 1; i <= n / 2; i++) {
        for (int j = 1; j <= n / 2; j++) {
          ar[i][j] = f[idx];
          ar[n - i + 1][j] = f[idx];
          ar[i][n - j + 1] = f[idx];
          ar[n - i + 1][n - j + 1] = f[idx];
          idx++;
        }
      }
      for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) cout << ar[i][j] << " ";
        cout << "\n";
      }
    }
  } else {
    int mp[1001];
    for (int i = 1; i <= 1000; i++) mp[i] = 0;
    queue<int> q;
    vector<int> two;
    vector<int> one;
    for (int i = 0; i < n * n; ++i) {
      int x;
      cin >> x;
      mp[x]++;
      if (mp[x] == 4) {
        q.push(x);
        mp[x] = 0;
      }
    }
    for (int i = 1; i <= 1000; ++i) {
      while (mp[i] >= 2) {
        two.push_back(i);
        mp[i] -= 2;
      }
      if (mp[i] == 1) one.push_back(i);
    }
    int fsize = (n - 1) * (n - 1);
    fsize /= 4;
    while (q.size() > fsize && q.size() != 0) {
      int f = q.front();
      q.pop();
      two.push_back(f);
      two.push_back(f);
    }
    if (q.size() < fsize) {
      cout << "NO"
           << "\n";
      return 0;
    }
    if (two.size() < (n - 1)) {
      cout << "NO"
           << "\n";
      return 0;
    }
    if (one.size() < 1) {
      cout << "NO"
           << "\n";
      return 0;
    }
    cout << "YES"
         << "\n";
    int idx = 0;
    int ar[n + 1][n + 1];
    for (int i = 1; i <= n / 2; i++) {
      for (int j = 1; j <= n / 2; j++) {
        int f = q.front();
        q.pop();
        ar[i][j] = f;
        ar[n - i + 1][j] = f;
        ar[i][n - j + 1] = f;
        ar[n - i + 1][n - j + 1] = f;
      }
    }
    idx = 0;
    for (int j = 1; j <= n / 2; j++) {
      ar[(n / 2) + 1][j] = two[idx];
      ar[(n / 2) + 1][n - j + 1] = two[idx];
      idx++;
    }
    for (int i = 1; i <= n / 2; i++) {
      ar[i][(n / 2) + 1] = two[idx];
      ar[n - i + 1][(n / 2) + 1] = two[idx];
      idx++;
    }
    ar[(n / 2) + 1][(n / 2) + 1] = one[0];
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= n; j++) cout << ar[i][j] << " ";
      cout << "\n";
    }
  }
  return 0;
}
