#include <bits/stdc++.h>
using namespace std;
const int N = 20;
int n;
long long a[N];
long long f(int i, int j) { return a[i * n + j]; }
pair<long long, long long> p[N];
int m = 0;
long long s = 0;
long long c[N];
long long r[N];
long long d;
long long d1;
map<long long, long long> S;
long long arr[N][N];
bool sol = false;
void out() {
  if (sol) return;
  sol = true;
  cout << s << endl;
  for (int i = (0); i < (int)(n); i++)
    for (int j = (0); j < (int)(n); j++) {
      cout << arr[i][j] << (j == n - 1 ? "\n" : " ");
    }
}
void go(int, int);
void gao(int i, int j, long long first) {
  arr[i][j] = first;
  c[i] += first;
  r[j] += first;
  if (i == j) d += first;
  if (i + j == n - 1) d1 += first;
}
void rec2(int i, int j, int k) {
  if (sol || p[k].second <= 0) return;
  long long &first = p[k].first;
  p[k].second--;
  gao(i, j, first);
  long long wt = s - r[j];
  if (S.find(wt) != S.end() && p[S[wt]].second > 0) {
    int k2 = S[wt];
    p[k2].second--;
    gao(i + 1, j, wt);
    go(i, j + 1);
    gao(i + 1, j, -wt);
    p[k2].second++;
  }
  gao(i, j, -first);
  p[k].second++;
}
void rec(int i, int j, int k) {
  if (sol || p[k].second <= 0) return;
  long long &first = p[k].first;
  p[k].second--;
  gao(i, j, first);
  go(i, j + 1);
  gao(i, j, -first);
  p[k].second++;
}
void go(int i, int j) {
  if (sol) return;
  if (i == n - 2 && j == 2) {
    if (d1 != r[0]) return;
  }
  if (i == n - 1) {
    if (s == d && s == d1) {
      out();
    }
    return;
  }
  if (j == n) return go(i + 1, 0);
  if (j == n - 1) {
    long long wt = s - c[i];
    if (S.find(wt) == S.end() || p[S[wt]].second <= 0) return;
    int k = S[wt];
    if (i == n - 2) {
      rec2(i, j, k);
    } else {
      rec(i, j, k);
    }
  } else if (i == n - 2) {
    for (int k = (0); k < (int)(m); k++) rec2(i, j, k);
  } else {
    for (int k = (0); k < (int)(m); k++) rec(i, j, k);
  }
}
int main() {
  cin >> n;
  for (int i = (0); i < (int)(n * n); i++) cin >> a[i];
  if (n == 1) {
    cout << a[0] << endl << a[0] << endl;
    return 0;
  }
  sort(a, a + n * n);
  for (int i = (0); i < (int)(n * n); i++) {
    int b = a[i];
    int r = 0;
    while (i < n * n && a[i] == b) ++i, ++r;
    i--;
    S[b] = m;
    p[m++] = pair<int, int>(b, r);
  }
  s = 0LL;
  for (int i = (0); i < (int)(n * n); i++) s += a[i];
  s /= n;
  go(0, 0);
}
