#include <bits/stdc++.h>
using namespace std;
int getint() {
  unsigned int c;
  int x = 0;
  while (((c = getchar()) - '0') >= 10) {
    if (c == '-') return -getint();
    if (!~c) exit(0);
  }
  do {
    x = (x << 3) + (x << 1) + (c - '0');
  } while (((c = getchar()) - '0') < 10);
  return x;
}
int n, nn, sum;
int as[20];
int c[10][10];
bool used[20];
int num[20], have[20], ns;
int perm[20][20][20];
void dfs(int row, int col, int rows, int cols, int dir, int cnt) {
  int i, j, k;
  if (cnt == nn) {
    int tmp1 = 0, tmp2 = 0;
    for (i = 0; i < n; i++) {
      tmp1 += c[i][i];
      tmp2 += c[i][n - 1 - i];
    }
    if (tmp1 != sum) return;
    if (tmp2 != sum) return;
    tmp1 = tmp2 = 0;
    for (i = 0; i < n; i++) {
      tmp1 += c[n - 1][i];
      tmp2 += c[i][n - 1];
    }
    if (tmp1 != sum) return;
    if (tmp2 != sum) return;
    for (i = 0; i < n; i++) {
      for (j = 0; j < n; j++) {
        if (j) putchar(' ');
        printf("%d", c[i][j]);
      }
      puts("");
    }
    exit(0);
  }
  if (row == n or col == n) {
    int tmp = 0;
    if (dir == 0) {
      for (i = 0; i < n; i++) tmp += c[row][i];
      if (tmp != sum) return;
    } else {
      for (i = 0; i < n; i++) tmp += c[i][col];
      if (tmp != sum) return;
    }
    if (dir == 0) {
      dfs(rows + 1, cols, rows + 1, cols, 1, cnt);
    } else {
      dfs(rows, cols + 1, rows, cols + 1, 0, cnt);
    }
  }
  for (i = 0; i < ns; i++) {
    int d = perm[row][col][i];
    if (have[d]) {
      have[d]--;
      c[row][col] = num[d];
      if (dir == 0) dfs(row, col + 1, rows, cols, dir, cnt + 1);
      if (dir == 1) dfs(row + 1, col, rows, cols, dir, cnt + 1);
      have[d]++;
    }
  }
}
int main() {
  int i, j, tcc, tc = 1 << 28;
  for (tcc = 0; tcc < tc; tcc++) {
    n = getint(), nn = n * n, sum = 0;
    for (i = 0; i < nn; i++) as[i] = getint(), sum += as[i];
    sum /= n;
    for (i = 0; i < nn; i++) num[i] = as[i];
    sort(num, num + nn);
    ns = unique(num, num + nn) - num;
    for (i = 0; i < ns; i++) {
      for (j = 0; j < nn; j++)
        if (num[i] == as[j]) have[i]++;
    }
    for (i = 0; i < n; i++)
      for (j = 0; j < n; j++) {
        for (int k = 0; k < ns; k++) perm[i][j][k] = k;
        random_shuffle(perm[i][j], perm[i][j] + ns);
      }
    printf("%d\n", sum);
    dfs(0, 0, 0, 0, 0, 0);
  }
  return 0;
}
