#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, x[maxn];
bool mark[maxn];
vector<vector<int> > all;
vector<int> todo;
int fond(int x) {
  for (int i = 0; i < n * n; i++)
    if (!mark[i] && a[i] == x) return i;
  return -1;
}
void back(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);
  }
  if (s == n - 1) {
    fill(b[n - 1], b[n - 1] + n, ex);
    for (int i = 0; i < n - 1; i++)
      for (int j = 0; j < n; j++) b[n - 1][j] -= b[i][j];
    int i = 0;
    for (int tmp; i < n; i++)
      if (~(tmp = fond(b[n - 1][i])))
        mark[tmp] = 1, todo.push_back(tmp);
      else
        break;
    if (i == n) back(n);
    for (auto x : todo) mark[x] = 0;
    todo.clear();
  }
  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;
      back(s + 1);
      for (int i = 0; i < n; i++) mark[v[i]] = 0;
    } while (next_permutation(v.begin(), v.end()));
  }
}
void tof(int idx) {
  if (idx == 4 && x[0] + x[1] + x[2] + x[3] != ex) return;
  if (idx == 8 && x[4] + x[5] + x[6] + x[7] != ex) return;
  if (idx == 12 && x[8] + x[9] + x[10] + x[11] != ex) return;
  if (idx == 16 && x[12] + x[13] + x[14] + x[15] != ex) return;
  if (idx == 13 && x[0] + x[4] + x[8] + x[12] != ex) return;
  if (idx == 14 && x[1] + x[5] + x[9] + x[13] != ex) return;
  if (idx == 15 && x[2] + x[6] + x[10] + x[14] != ex) return;
  if (idx == 16 && x[3] + x[7] + x[11] + x[15] != ex) return;
  if (idx == 13 && x[3] + x[6] + x[9] + x[12] != ex) return;
  if (idx == 16 && x[0] + x[5] + x[10] + x[15] != ex) return;
  if (idx == 16) {
    for (int i = 0; i < n; i++, cout << '\n')
      for (int j = 0; j < n; j++) cout << x[i * 4 + j] << ' ';
    exit(0);
  }
  for (int i = 0; !(i >> 4); ++i)
    if (!mark[i]) {
      x[idx] = a[i], mark[i] = 1;
      tof(idx + 1);
      mark[i] = 0;
    }
}
int main() {
  srand(time(0));
  ios::sync_with_stdio(0), cin.tie();
  cin >> n;
  for (int i = 0; i < n * n; i++) cin >> a[i], ex += a[i];
  random_shuffle(a, a + n * n);
  ex /= n;
  cout << ex << '\n';
  if (n < 4) {
    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());
        }
      }
    return back(), 0;
  }
  tof(0);
  return 0;
}
