#include <bits/stdc++.h>
using namespace std;
long long mod = 1e9 + 7;
int rev(int i, int n) { return (n - i - 1); }
int update(int **res, vector<pair<int, int>> &v,
           priority_queue<pair<int, int>> &pq, int n) {
  pair<int, int> ce = pq.top();
  pq.pop();
  if (ce.first >= n) {
    for (int i = 0; i < n; i++) {
      res[v[i].first][v[i].second] = ce.second;
    }
    ce.first -= n;
    pq.push(ce);
  } else {
    cout << "NO";
    return 0;
  }
  return 1;
}
int main() {
  int n;
  cin >> n;
  int val;
  unordered_map<int, int> mp;
  for (int i = 0; i < n * n; i++) {
    cin >> val;
    mp[val]++;
  }
  unordered_map<int, int>::iterator it = mp.begin();
  priority_queue<pair<int, int>> pq;
  while (it != mp.end()) {
    pq.push({it->second, it->first});
    it++;
  }
  int m = n / 2;
  int **res = new int *[n];
  for (int i = 0; i < n; i++) {
    res[i] = new int[n];
  }
  for (int i = 0; i < m; i++) {
    for (int j = 0; j < m; j++) {
      vector<pair<int, int>> v = {
          {i, rev(j, n)}, {i, j}, {rev(i, n), rev(j, n)}, {rev(i, n), j}};
      if (!update(res, v, pq, 4)) return 0;
    }
  }
  if (n & 1) {
    for (int i = 0; i < m; i++) {
      vector<pair<int, int>> v = {{i, m}, {rev(i, n), m}};
      if (!update(res, v, pq, 2)) return 0;
      v = {{m, i}, {m, rev(i, n)}};
      if (!update(res, v, pq, 2)) return 0;
    }
    vector<pair<int, int>> v = {{m, m}};
    if (!update(res, v, pq, 1)) return 0;
  }
  cout << "YES";
  for (int i = 0; i < n; i++) {
    cout << endl;
    for (int j = 0; j < n; j++) {
      cout << res[i][j] << " ";
    }
  }
  return 0;
}
