#include <bits/stdc++.h>
using namespace std;
const int inf = 2000000000;
const long long linf = 9000000000000000000LL;
const double finf = 1.0e18;
const double eps = 1.0e-8;
int n, N, a[20], s, A[4][4];
bool b[20];
bool dfs(int x, int y) {
  if (y == n - 1) {
    y = 0;
    x++;
  }
  if (x == n - 1) {
    int tmp = 0;
    for (int i = 0; i < n; i++) tmp += a[A[i][n - 1 - i]];
    return tmp == s;
  }
  for (int i = 0; i < N; i++) {
    if (b[i]) {
      b[i] = false;
      A[x][y] = i;
      bool flag = true;
      if (y == n - 2) {
        int tmp = 0;
        for (int k = 0; k <= y; k++) {
          tmp += a[A[x][k]];
        }
        tmp = s - tmp;
        A[x][n - 1] = -1;
        for (int k = 0; k < N; k++) {
          if ((a[k] == tmp) && (b[k])) {
            b[k] = false;
            A[x][n - 1] = k;
            break;
          }
        }
        if (A[x][n - 1] == -1) flag = false;
      }
      if (x == n - 2) {
        int tmp = 0;
        for (int k = 0; k <= x; k++) {
          tmp += a[A[k][y]];
        }
        tmp = s - tmp;
        A[n - 1][y] = -1;
        for (int k = 0; k < N; k++) {
          if ((a[k] == tmp) && (b[k])) {
            b[k] = false;
            A[n - 1][y] = k;
            break;
          }
        }
        if (A[n - 1][y] == -1) flag = false;
      }
      if ((x == n - 2) && (y == n - 2)) {
        int tmp = 0;
        for (int k = 0; k <= x; k++) {
          tmp += a[A[k][k]];
        }
        tmp = s - tmp;
        A[n - 1][n - 1] = -1;
        for (int k = 0; k < N; k++) {
          if ((a[k] == tmp) && (b[k])) {
            b[k] = false;
            A[n - 1][n - 1] = k;
            break;
          }
        }
        if (A[n - 1][n - 1] == -1) flag = false;
      }
      if (flag)
        if (dfs(x, y + 1)) return true;
      b[i] = true;
      if ((y == n - 2) && (A[x][n - 1] != -1)) {
        b[A[x][n - 1]] = true;
      }
      if ((x == n - 2) && (A[n - 1][y] != -1)) {
        b[A[n - 1][y]] = true;
      }
      if ((x == n - 2) && (y == n - 2) && (A[n - 1][n - 1] != -1)) {
        b[A[n - 1][n - 1]] = true;
      }
    }
  }
  return false;
}
int main() {
  scanf("%d", &n);
  N = n * n;
  s = 0;
  for (int i = 0; i < N; i++) {
    scanf("%d", &a[i]);
    s += a[i];
  }
  s /= n;
  if (n == 1) {
    printf("%d\n", s);
    printf("%d\n", a[0]);
    return 0;
  }
  memset(b, true, sizeof(b));
  dfs(0, 0);
  printf("%d\n", s);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (j) printf(" ");
      printf("%d", a[A[i][j]]);
    }
    printf("\n");
  }
  return 0;
}
