#include <bits/stdc++.h>
const double pi = acos(-1.0), eps = 1e-9;
const int dx[8] = {1, -1, 0, 0, 1, 1, -1, -1};
const int dy[8] = {0, 0, 1, -1, 1, -1, -1, 1};
const int MO = (int)(1e9 + 7);
using namespace std;
int a[101][101];
int num[10001];
bool vis[10001];
int n, sum, tot;
int tnum[10001], who[10001];
void check() {
  for (int i = 1; i <= n; i++) {
    int ns = 0;
    for (int j = 1; j <= n; j++) ns += a[j][i];
    if (ns != sum) return;
  }
  int ns = 0;
  for (int i = 1; i <= n; i++) ns += a[i][i];
  if (ns != sum) return;
  ns = 0;
  for (int i = 1; i <= n; i++) ns += a[n - i + 1][i];
  if (ns != sum) return;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      printf("%d", a[i][j]);
      if (j == n)
        putchar('\n');
      else
        putchar(' ');
    }
  }
  exit(0);
}
bool checkline(int x) {
  int ns = 0;
  for (int j = 1; j <= n; j++) ns += a[x][j];
  if (ns != sum) return false;
  return true;
}
void dfs(int x, int y) {
  if (x > n) {
    check();
    return;
  }
  if (x > 1 && y == 1)
    if (!checkline(x - 1)) return;
  for (int i = tot; i >= 1; i--)
    if (tnum[i]) {
      --tnum[i];
      a[x][y] = who[i];
      if (y == n)
        dfs(x + 1, 1);
      else
        dfs(x, y + 1);
      ++tnum[i];
    }
}
map<int, int> M;
int main() {
  scanf("%d", &n);
  sum = 0;
  for (int i = 1; i <= n * n; i++) {
    scanf("%d", &num[i]), sum += num[i];
    if (!M.count(num[i])) {
      M[num[i]] = ++tot;
      who[tot] = num[i];
    }
    tnum[M[num[i]]]++;
  }
  sum /= n;
  printf("%d\n", sum);
  dfs(1, 1);
}
