#include <bits/stdc++.h>
using namespace std;
template <class T, class L>
bool smax(T& x, L y) {
  return x < y ? (x = y, 1) : 0;
}
template <class T, class L>
bool smin(T& x, L y) {
  return x > y ? (x = y, 1) : 0;
}
const int maxn = 16;
int n, a[maxn], b[maxn][maxn], ex;
bool mark[maxn];
vector<vector<int> > all;
void bt(int s = 0) {
  if (s == n) {
    for (int i = 0, sum = 0; i < n; i++, sum = 0) {
      for (int j = 0; j < n; j++) sum += b[j][i];
      if (sum != ex) return;
    }
    {
      int sum = 0;
      for (int i = 0; i < n; i++) sum += b[i][i];
      if (sum != ex) return;
    }
    {
      int sum = 0;
      for (int i = 0; i < n; i++) sum += b[i][n - i - 1];
      if (sum != ex) return;
    }
    for (int i = 0; i < n; i++, cout << '\n')
      for (int j = 0; j < n; j++) cout << b[i][j] << ' ';
    exit(0);
  }
  for (auto v : all) {
    bool reval = 1;
    for (auto x : v)
      if (mark[x]) {
        reval = 0;
        break;
      }
    if (!reval) continue;
    do {
      for (int i = 0; i < n; i++) b[s][i] = a[v[i]], mark[v[i]] = 1;
      bt(s + 1);
      for (int i = 0; i < n; i++) mark[v[i]] = 0;
    } while (next_permutation(v.begin(), v.end()));
  }
}
int main() {
  ios::sync_with_stdio(0), cin.tie();
  cin >> n;
  for (int i = 0; i < n * n; i++) cin >> a[i], ex += a[i];
  ex /= n;
  cout << ex << '\n';
  for (int i = 0; i < 1 << n * n; i++)
    if (__builtin_popcount(i) == n) {
      int sum = 0;
      for (int j = 0; j < n * n; j++) sum += (i >> j & 1) * a[j];
      if (sum == ex) {
        all.push_back({});
        for (int j = 0; j < n * n; j++)
          if (i >> j & 1) all.back().push_back(j);
        sort(all.back().begin(), all.back().end());
      }
    }
  bt();
  return 0;
}
