#include <bits/stdc++.h>
using namespace std;
int N;
int S = 0;
int a[20];
bool b[20];
int w[4][4];
inline int ex(int l) {
  for (int k = 0; k < (N * N); k++) {
    if (a[k] == l && !b[k]) return k;
  }
  return -1;
}
void suche(int k) {
  switch (k) {
    case 0:
      for (int i = 0; i < (N * N); i++) {
        if (b[i]) continue;
        w[0][0] = a[i];
        b[i] = true;
        suche(k + 1);
        b[i] = false;
      }
      break;
    case 1:
      for (int i = 0; i < (N * N); i++) {
        if (b[i]) continue;
        w[1][0] = a[i];
        b[i] = true;
        suche(k + 1);
        b[i] = false;
      }
      break;
    case 2:
      for (int i = 0; i < (N * N); i++) {
        if (b[i]) continue;
        w[2][0] = a[i];
        b[i] = true;
        suche(k + 1);
        b[i] = false;
      }
      break;
    case 3: {
      int i = ex(S - w[0][0] - w[1][0] - w[2][0]);
      if (i == -1) return;
      w[3][0] = a[i];
      b[i] = true;
      suche(k + 1);
      b[i] = false;
    } break;
    case 4:
      for (int i = 0; i < (N * N); i++) {
        if (b[i]) continue;
        w[0][1] = a[i];
        b[i] = true;
        suche(k + 1);
        b[i] = false;
      }
      break;
    case 5:
      for (int i = 0; i < (N * N); i++) {
        if (b[i]) continue;
        w[1][1] = a[i];
        b[i] = true;
        suche(k + 1);
        b[i] = false;
      }
      break;
    case 6:
      for (int i = 0; i < (N * N); i++) {
        if (b[i]) continue;
        w[2][1] = a[i];
        b[i] = true;
        suche(k + 1);
        b[i] = false;
      }
      break;
    case 7: {
      int i = ex(S - w[0][1] - w[1][1] - w[2][1]);
      if (i == -1) return;
      w[3][1] = a[i];
      b[i] = true;
      suche(k + 1);
      b[i] = false;
    } break;
    case 8:
      for (int i = 0; i < (N * N); i++) {
        if (b[i]) continue;
        w[1][2] = a[i];
        b[i] = true;
        suche(k + 1);
        b[i] = false;
      }
      break;
    case 9: {
      int i = ex(S - w[1][2] - w[2][1] - w[3][0]);
      if (i == -1) return;
      w[0][3] = a[i];
      b[i] = true;
      suche(k + 1);
      b[i] = false;
    } break;
    case 10: {
      int i = ex(S - w[1][0] - w[1][1] - w[1][2]);
      if (i == -1) return;
      w[1][3] = a[i];
      b[i] = true;
      suche(k + 1);
      b[i] = false;
    } break;
    case 11: {
      int i = ex(S - w[0][0] - w[0][1] - w[0][3]);
      if (i == -1) return;
      w[0][2] = a[i];
      b[i] = true;
      suche(k + 1);
      b[i] = false;
    } break;
    case 12:
      for (int i = 0; i < (N * N); i++) {
        if (b[i]) continue;
        w[2][2] = a[i];
        b[i] = true;
        suche(k + 1);
        b[i] = false;
      }
      break;
    case 13: {
      int i = ex(S - w[0][2] - w[1][2] - w[2][2]);
      if (i == -1) return;
      w[3][2] = a[i];
      b[i] = true;
      suche(k + 1);
      b[i] = false;
    } break;
    case 14: {
      int i = ex(S - w[2][0] - w[2][1] - w[2][2]);
      if (i == -1) return;
      w[2][3] = a[i];
      b[i] = true;
      suche(k + 1);
      b[i] = false;
    } break;
    case 15: {
      int i = ex(S - w[0][0] - w[1][1] - w[2][2]);
      if (i == -1) return;
      w[3][3] = a[i];
      b[i] = true;
      suche(k + 1);
      b[i] = false;
    } break;
    default:
      for (int y = 0; y < (N); y++) {
        for (int x = 0; x < (N); x++) {
          if (x) printf(" ");
          printf("%d", w[x][y]);
        }
        printf("\n");
      }
      exit(0);
  }
}
int main() {
  scanf("%d", &N);
  for (int i = 0; i < (N * N); i++) {
    scanf("%d", &a[i]);
    S += a[i];
  }
  S /= N;
  printf("%d\n", S);
  sort(a, a + (N * N));
  if (N <= 3) {
    do {
      bool ok = true;
      for (int y = 0; y < (N); y++) {
        int s = 0;
        for (int x = 0; x < (N); x++) s += a[x + N * y];
        if (s != S) ok = false;
      }
      for (int x = 0; x < (N); x++) {
        int s = 0;
        for (int y = 0; y < (N); y++) s += a[x + N * y];
        if (s != S) ok = false;
      }
      int s = 0;
      for (int d = 0; d < (N); d++) {
        s += a[d + N * d];
      }
      if (s != S) ok = false;
      s = 0;
      for (int d = 0; d < (N); d++) {
        s += a[(N - d - 1) + N * d];
      }
      if (s != S) ok = false;
      if (ok) {
        for (int y = 0; y < (N); y++) {
          for (int x = 0; x < (N); x++) {
            if (x) printf(" ");
            printf("%d", a[x + N * y]);
          }
          printf("\n");
        }
        break;
      }
    } while (next_permutation(a, a + (N * N)));
  } else {
    suche(0);
  }
  return 0;
}
