#include <bits/stdc++.h>
using namespace std;
int n;
int a[100], second, b[20][20], r[5], c[5];
inline int calc() {
  int res = 0;
  memset(r, 0, sizeof(r));
  memset(c, 0, sizeof(c));
  int d1 = 0, d2 = 0;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      r[i] += b[i][j];
      c[j] += b[i][j];
      if (i == j) d1 += b[i][j];
      if (i + j == n + 1) d2 += b[i][j];
    }
  }
  for (int i = 1; i <= n; ++i)
    res = max(res, max(abs(second - r[i]), abs(second - c[i])));
  res = max(res, max(abs(second - d1), abs(second - d2)));
  return res;
}
void print() {
  printf("%d\n", second);
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      printf("%d ", b[i][j]);
    }
    puts("");
  }
  exit(0);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n * n; ++i) {
    scanf("%d", &a[i]);
    second += a[i];
  }
  second /= n;
  if (n == 1) {
    printf("%d\n%d", second, a[1]);
    return 0;
  }
  int m = n * n;
  srand(time(0));
  while (true) {
    random_shuffle(a + 1, a + n * n + 1);
    int v = 0;
    for (int i = 1; i <= m; ++i) {
      if (i % n == 1) ++v;
      int x = (i % n);
      if (x == 0) x = n;
      b[v][x] = a[i];
    }
    int t = calc();
    for (int it = 0; it < 500; ++it) {
      int i = rand() % m + 1, j = rand() % m + 1;
      int x = (i + n - 1) / n, y = i % n;
      if (y == 0) y = n;
      int xx = (j + n - 1) / n, yy = j % n;
      if (yy == 0) yy = n;
      swap(b[x][y], b[xx][yy]);
      int tt = calc();
      if (tt < t)
        t = tt;
      else
        swap(b[x][y], b[xx][yy]);
      if (t == 0) print();
    }
  }
  return 0;
}
