#include <bits/stdc++.h>
using namespace std;
mt19937 mt_rand(chrono::system_clock::now().time_since_epoch().count());
const int N = 22;
int n, tot;
int target;
int id[N];
int a[N];
int b[N][N];
inline int eval() {
  for (int i = 0; i < tot; i++) {
    b[i / n][i % n] = a[id[i]];
  }
  int ret = 0;
  for (int i = 0; i < n; i++) {
    int sum = 0;
    for (int j = 0; j < n; j++) {
      sum += b[i][j];
    }
    ret = max(ret, abs(sum - target));
    sum = 0;
    for (int j = 0; j < n; j++) {
      sum += b[j][i];
    }
    ret = max(ret, abs(sum - target));
  }
  int sum = 0;
  for (int i = 0; i < n; i++) {
    sum += b[i][i];
  }
  ret = max(ret, abs(sum - target));
  sum = 0;
  for (int i = 0; i < n; i++) {
    sum += b[i][n - i - 1];
  }
  ret = max(ret, abs(sum - target));
  return ret;
}
int main() {
  scanf("%d", &n);
  tot = n * n;
  for (int i = 0; i < tot; i++) {
    scanf("%d", a + i);
    id[i] = i;
    target += a[i];
  }
  target /= n;
  while (clock() < 1.9 * CLOCKS_PER_SEC) {
    random_shuffle(id, id + tot);
    for (int iter = 0; iter < 1111; iter++) {
      int x = mt_rand() % tot, y = mt_rand() % tot;
      int h = eval();
      swap(id[x], id[y]);
      int hh = eval();
      if (hh > h) {
        swap(id[x], id[y]);
      } else {
        h = hh;
      }
      if (h == 0) {
        goto stop;
      }
    }
  }
stop:
  for (int i = 0; i < tot; i++) {
    b[i / n][i % n] = a[id[i]];
  }
  printf("%d\n", target);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      printf("%d ", b[i][j]);
    }
    printf("\n");
  }
  return 0;
}
