#include <bits/stdc++.h>
using namespace std;
int b[10][10];
int a[20], r[20];
int val, n;
int cal() {
  int delta = 0;
  for (int i = 0; i < n; i++) {
    int sum = 0;
    for (int j = 0; j < n; j++) sum += b[i][j];
    delta = max(delta, abs(sum - val));
  }
  for (int j = 0; j < n; j++) {
    int sum = 0;
    for (int i = 0; i < n; i++) sum += b[i][j];
    delta = max(delta, abs(sum - val));
  }
  int sum = 0;
  for (int i = 0; i < n; i++) sum += b[i][i];
  delta = max(delta, abs(sum - val));
  sum = 0;
  for (int i = 0; i < n; i++) sum += b[i][n - 1 - i];
  delta = max(delta, abs(sum - val));
  return delta;
}
int main() {
  while (scanf("%d", &n) == 1) {
    int sum = 0;
    for (int i = 0; i < n * n; i++) {
      scanf("%d", &a[i]);
      sum += a[i];
    }
    val = sum / n;
    for (int i = 0; i < n * n; i++) r[i] = i;
    while (true) {
      random_shuffle(r, r + n * n);
      for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++) b[i][j] = a[r[i * n + j]];
      for (int i = 0; i < 1000; i++) {
        int x = rand() % n;
        int y = rand() % n;
        int x2 = rand() % n;
        int y2 = rand() % n;
        int num1 = cal();
        swap(b[x][y], b[x2][y2]);
        int num2 = cal();
        if (num1 < num2) swap(b[x][y], b[x2][y2]);
      }
      if (cal() == 0) {
        printf("%d\n", val);
        for (int i = 0; i < n; i++) {
          for (int j = 0; j < n; j++) printf("%d ", b[i][j]);
          printf("\n");
        }
        break;
      }
    }
  }
  return 0;
}
