#include <bits/stdc++.h>
using namespace std;
bool debug = false;
int n, m, k;
int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
int a[20], mp[5][5], ss;
int check() {
  int ans = 0, t;
  for (int(i) = 0; (i) < (int)(n); (i)++)
    for (int(j) = 0; (j) < (int)(n); (j)++) mp[i][j] = a[i * n + j];
  for (int(i) = 0; (i) < (int)(n); (i)++) {
    t = 0;
    for (int(j) = 0; (j) < (int)(n); (j)++) t += mp[i][j];
    ans += abs(ss - t);
  }
  for (int(i) = 0; (i) < (int)(n); (i)++) {
    t = 0;
    for (int(j) = 0; (j) < (int)(n); (j)++) t += mp[j][i];
    ans += abs(ss - t);
  }
  t = 0;
  for (int(i) = 0; (i) < (int)(n); (i)++) t += mp[i][i];
  ans += abs(ss - t);
  t = 0;
  for (int(i) = 0; (i) < (int)(n); (i)++) t += mp[i][n - 1 - i];
  ans += abs(ss - t);
  return ans;
}
int main() {
  scanf("%d", &n);
  for (int(i) = 0; (i) < (int)(n * n); (i)++) {
    scanf("%d", a + i);
    ss += a[i];
  }
  ss /= n;
  m = n * n;
  int x = check();
  while (x) {
    random_shuffle(a, a + n * n);
    x = check();
    if (x == 0) break;
    int num = 1000;
    while (num--) {
      int i = rand() % m, j = rand() % m;
      swap(a[i], a[j]);
      int y = check();
      if (y < x) {
        x = y;
        if (y == 0) break;
      } else {
        swap(a[i], a[j]);
      }
    }
    if (x == 0) break;
  }
  printf("%d\n", ss);
  for (int(i) = 0; (i) < (int)(n); (i)++) {
    for (int(j) = 0; (j) < (int)(n); (j)++) printf("%d ", mp[i][j]);
    puts("");
  }
  return 0;
}
