#include <bits/stdc++.h>
using namespace std;
inline int next_samebit(int mask) {
  int lowbit = mask & -mask;
  int slack = lowbit + mask;
  return slack | (mask ^ slack) / lowbit / 4;
}
int n, a[16], ans[4][4], at, row[4], col[4], zig[3], tag[2];
const int mt[] = {1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1};
const int mr[] = {0, 0, 0, 0, 1, 2, 3, 2, 1, 1, 1, 3, 2, 2, 3, 3};
const int mc[] = {0, 1, 2, 3, 0, 0, 0, 1, 2, 1, 3, 1, 2, 3, 2, 3};
const int mv[] = {1, 0, 0, 2, 0, 0, 2, 2, 2, 1, 0, 0, 1, 0, 0, 1};
const int fr[] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1};
const int fc[] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1};
const int fv[] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1};
bool dfs(int i) {
  if (i == 16) return true;
  int r = mr[i], c = mc[i], v = mv[i];
  for (int s = tag[mt[i]]; s; s &= s - 1) {
    int x = __builtin_ctz(s);
    ans[r][c] = a[x];
    tag[mt[i]] ^= 1 << x, row[r] += a[x], col[c] += a[x], zig[v] += a[x];
    if ((!fr[i] || row[r] == at) && (!fc[i] || col[c] == at) &&
        (!fv[i] || zig[v] == at) && dfs(i + 1))
      return true;
    tag[mt[i]] ^= 1 << x, row[r] -= a[x], col[c] -= a[x], zig[v] -= a[x];
  }
  return false;
}
int main() {
  scanf("%d", &n);
  int m = n * n, all = 0, sum = 0;
  for (int i = 0; i < m; all += a[i++]) scanf("%d", a + i);
  if (n == 1) {
    sum = a[0];
  } else if (n == 2) {
    sort(a, a + m);
    do {
      sum = a[0] + a[1];
      if (sum == a[3] + a[4] && sum == a[0] + a[3] && sum == a[1] + a[4] &&
          sum == a[0] + a[4] && sum == a[1] + a[3])
        break;
    } while (next_permutation(a, a + m));
  } else if (n == 3) {
    sort(a, a + m);
    do {
      sum = a[0] + a[1] + a[2];
      if (sum == a[3] + a[4] + a[5] && sum == a[6] + a[7] + a[8] &&
          sum == a[0] + a[3] + a[6] && sum == a[1] + a[4] + a[7] &&
          sum == a[2] + a[5] + a[8] && sum == a[0] + a[4] + a[8] &&
          sum == a[2] + a[4] + a[6])
        break;
    } while (next_permutation(a, a + m));
  } else if (n == 4) {
    int mask = (1 << m) - 1;
    for (int s = 255; s <= mask; s = next_samebit(s)) {
      for (int i = sum = 0; i < m; i++)
        if (s & 1 << i) sum += a[i];
      if ((all * 2 + sum) % 10) continue;
      at = (all * 2 + sum) / 10;
      tag[0] = mask ^ s;
      tag[1] = s;
      if (dfs(0)) break;
    }
    for (int i = 0; i < 4; i++)
      for (int j = 0; j < 4; j++) a[i * n + j] = ans[i][j];
    sum = a[0] + a[1] + a[2] + a[3];
  }
  printf("%d\n", sum);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n - 1; j++) printf("%d ", a[i * n + j]);
    printf("%d\n", a[i * n + n - 1]);
  }
}
