#include <bits/stdc++.h>
using namespace std;
int n;
int p[4][4];
int a[16];
int sum1[4];
int sum2[4];
int dio1, dio2;
bool ok;
int mask;
void dfs(int x) {
  int i, j;
  if (x == n * n) {
    if (dio1 == dio2 && dio1 == sum1[0] && sum1[1] == dio1 && sum1[2] == dio1 &&
        sum2[0] == dio1 && sum2[1] == dio1 && sum2[2] == dio1) {
      ok = true;
      printf("%d\n", dio1);
      for (i = 0; i < n; i++) {
        printf("%d", p[i][0]);
        for (j = 1; j < n; j++) printf(" %d", p[i][j]);
        printf("\n");
      }
    }
    return;
  }
  for (i = 0; i < n * n && !ok; i++)
    if ((mask & (1 << i)) == 0) {
      mask |= (1 << i);
      p[x / n][x % n] = a[i];
      sum1[x / n] += a[i];
      sum2[x % n] += a[i];
      if (x / n == x % n) dio1 += a[i];
      if (x == 2 || x == 4 || x == 6) dio2 += a[i];
      dfs(x + 1);
      sum1[x / n] -= a[i];
      sum2[x % n] -= a[i];
      if (x / n == x % n) dio1 -= a[i];
      if (x == 2 || x == 4 || x == 6) dio2 -= a[i];
      mask ^= (1 << i);
    }
}
void dfs2(int x) {
  int i, j;
  if (x == n * n) {
    if (dio1 == dio2 && dio1 == sum1[0] && sum1[1] == dio1 && sum2[0] == dio1 &&
        sum2[1] == dio1) {
      ok = true;
      printf("%d\n", dio1);
      for (i = 0; i < n; i++) {
        printf("%d", p[i][0]);
        for (j = 1; j < n; j++) printf(" %d", p[i][j]);
        printf("\n");
      }
    }
    return;
  }
  for (i = 0; i < n * n && !ok; i++)
    if ((mask & (1 << i)) == 0) {
      mask |= (1 << i);
      p[x / n][x % n] = a[i];
      sum1[x / n] += a[i];
      sum2[x % n] += a[i];
      if (x / n == x % n) dio1 += a[i];
      if (x == 1 || x == 2) dio2 += a[i];
      dfs2(x + 1);
      sum1[x / n] -= a[i];
      sum2[x % n] -= a[i];
      if (x / n == x % n) dio1 -= a[i];
      if (x == 1 || x == 2) dio2 -= a[i];
      mask ^= (1 << i);
    }
}
void super_dfs(int x) {
  int i, j;
  if (x == 16) {
    if (dio1 == dio2 && dio1 == sum1[0] && dio1 == sum1[3] && dio1 == sum1[1] &&
        dio1 == sum1[2])
      if (dio1 == sum2[0] && dio1 == sum2[1] && dio1 == sum2[2] &&
          dio1 == sum2[3]) {
        ok = true;
        printf("%d\n", dio1);
        for (i = 0; i < n; i++) {
          printf("%d", p[i][0]);
          for (j = 1; j < n; j++) printf(" %d", p[i][j]);
          printf("\n");
        }
      }
    return;
  }
  if (x == 7) {
    if (ok) return;
    for (i = 0; i < n * n; i++) {
      if (a[i] == sum1[0] - sum1[1] && (mask & (1 << i)) == 0) {
        mask |= (1 << i);
        p[1][3] = a[i];
        sum1[1] = sum1[0];
        sum2[3] += a[i];
        super_dfs(x + 1);
        sum1[1] -= a[i];
        sum2[3] -= a[i];
        mask ^= (1 << i);
        break;
      }
    }
    return;
  }
  if (x == 9) {
    if (ok) return;
    for (i = 0; i < n * n; i++) {
      if (a[i] == sum2[0] - dio2 && (mask & (1 << i)) == 0) {
        mask |= (1 << i);
        p[2][1] = a[i];
        sum2[1] += a[i];
        sum1[2] += a[i];
        dio2 = sum2[0];
        super_dfs(x + 1);
        sum2[1] -= a[i];
        sum1[2] -= a[i];
        dio2 -= a[i];
        mask ^= (1 << i);
        break;
      }
    }
    return;
  }
  if (x == 11) {
    if (ok) return;
    if (sum1[1] - sum1[2] != dio1 - sum2[3]) return;
    for (i = 0; i < n * n; i++) {
      if (a[i] == dio1 - sum2[3] && (mask & (1 << i)) == 0) {
        mask |= (1 << i);
        p[2][3] = a[i];
        sum2[3] = dio1;
        sum1[2] += a[i];
        super_dfs(x + 1);
        sum2[3] -= a[i];
        sum1[2] -= a[i];
        mask ^= (1 << i);
        break;
      }
    }
    return;
  }
  if (x == 13) {
    if (ok) return;
    for (i = 0; i < n * n; i++) {
      if (a[i] == sum2[0] - sum2[1] && (mask & (1 << i)) == 0) {
        mask |= (1 << i);
        p[3][1] = a[i];
        sum2[1] = sum2[0];
        sum1[3] += a[i];
        super_dfs(x + 1);
        sum2[1] -= a[i];
        sum1[3] -= a[i];
        mask ^= (1 << i);
        break;
      }
    }
    return;
  }
  if (x == 14) {
    if (ok) return;
    for (i = 0; i < n * n; i++) {
      if (a[i] == sum2[1] - sum2[2] && (mask & (1 << i)) == 0) {
        mask |= (1 << i);
        p[3][2] = a[i];
        sum2[2] = sum2[1];
        sum1[3] += a[i];
        super_dfs(x + 1);
        sum2[2] -= a[i];
        sum1[3] -= a[i];
        mask ^= (1 << i);
        break;
      }
    }
    return;
  }
  for (i = 0; i < n * n && !ok; i++)
    if ((mask & (1 << i)) == 0) {
      mask |= (1 << i);
      p[(x >> 2)][(x & 3)] = a[i];
      sum1[(x >> 2)] += a[i];
      sum2[(x & 3)] += a[i];
      if ((x >> 2) == (x & 3)) dio1 += a[i];
      if (x == 3 || x == 6 || x == 12) dio2 += a[i];
      super_dfs(x + 1);
      if ((x >> 2) == (x & 3)) dio1 -= a[i];
      if (x == 3 || x == 6 || x == 12) dio2 -= a[i];
      sum1[(x >> 2)] -= a[i];
      sum2[(x & 3)] -= a[i];
      mask ^= (1 << i);
    }
}
int main() {
  scanf("%d", &n);
  int i;
  for (i = 0; i < n * n; i++) scanf("%d", &a[i]);
  if (n == 1) {
    printf("%d\n", a[0]);
    printf("%d\n", a[0]);
    return 0;
  }
  if (n == 2) {
    dfs2(0);
    return 0;
  }
  if (n == 3) {
    dfs(0);
    return 0;
  }
  if (n == 4) {
    super_dfs(0);
    return 0;
  }
  return 0;
}
