#include <bits/stdc++.h>
using namespace std;
map<int, int> mp;
int ans[1000][1000], num[1008611];
int main() {
  int n, tmp, k = 0;
  cin >> n;
  mp.clear();
  for (int i = 0; i < n * n; i++) {
    cin >> tmp;
    if (mp[tmp] == 0) {
      num[k] = tmp;
      k++;
    }
    mp[tmp]++;
  }
  if (n % 2 == 0) {
    for (int i = 0; i < k; i++) {
      if (mp[num[i]] % 4 != 0) {
        cout << "NO" << endl;
        return 0;
      }
    }
    int p = 0;
    for (int i = 0; i < n / 2; i++) {
      for (int j = 0; j < n / 2; j++) {
        if (mp[num[p]] == 0) p++;
        ans[i][j] = num[p];
        ans[n - 1 - i][j] = num[p];
        ans[i][n - 1 - j] = num[p];
        ans[n - 1 - i][n - 1 - j] = num[p];
        mp[num[p]] -= 4;
      }
    }
  } else {
    int cnt1 = 0, cnt2 = 0, loc = 0;
    for (int i = 0; i < k; i++) {
      if (mp[num[i]] % 4 != 0) {
        if (mp[num[i]] % 4 == 1) {
          if (cnt1) {
            cout << "NO" << endl;
            return 0;
          } else {
            loc = i;
            cnt1++;
          }
        } else if (mp[num[i]] % 4 == 2) {
          if (cnt2 == n / 2 * 2) {
            cout << "NO" << endl;
            return 0;
          } else
            cnt2++;
        } else if (mp[num[i]] % 4 == 3) {
          if (cnt2 == n / 2 * 2) {
            cout << "NO" << endl;
            return 0;
          } else
            cnt2++;
          if (cnt1) {
            cout << "NO" << endl;
            return 0;
          } else {
            loc = i;
            cnt1++;
          }
        }
      }
    }
    if (!cnt1) {
      cout << "NO" << endl;
      return 0;
    }
    int p = 0;
    for (int i = 0; i < n / 2; i++) {
      for (int j = 0; j < n / 2; j++) {
        while (mp[num[p]] == 1 || mp[num[p]] == 2 || mp[num[p]] == 3 ||
               mp[num[p]] == 0)
          p++;
        ans[i][j] = num[p];
        ans[n - 1 - i][j] = num[p];
        ans[i][n - 1 - j] = num[p];
        ans[n - 1 - i][n - 1 - j] = num[p];
        mp[num[p]] -= 4;
      }
    }
    p = 0;
    ans[n / 2][n / 2] = num[loc];
    mp[num[loc]]--;
    for (int i = 0; i < n / 2; i++) {
      while (mp[num[p]] == 0) {
        p++;
      }
      ans[i][n / 2] = num[p];
      ans[n - i - 1][n / 2] = num[p];
      mp[num[p]] -= 2;
    }
    for (int i = 0; i < n / 2; i++) {
      while (mp[num[p]] == 0) {
        p++;
      }
      ans[n / 2][i] = num[p];
      ans[n / 2][n - i - 1] = num[p];
      mp[num[p]] -= 2;
    }
  }
  cout << "YES" << endl;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n - 1; j++) {
      cout << ans[i][j] << ' ';
    }
    cout << ans[i][n - 1] << endl;
  }
  return 0;
}
