#include <bits/stdc++.h>
using namespace std;
int mas[5][5];
int n, l;
int abss(int x) {
  if (x < 0) x = x * -1;
  return x;
}
int check() {
  int ans = 0, k;
  for (int i = 1; i <= n; i++) {
    k = 0;
    for (int j = 1; j <= n; j++) k += mas[i][j];
    ans += abss(l - k);
  }
  for (int i = 1; i <= n; i++) {
    k = 0;
    for (int j = 1; j <= n; j++) k += mas[j][i];
    ans += abss(l - k);
  }
  k = 0;
  for (int i = 1; i <= n; i++) k += mas[i][i];
  ans += abss(l - k);
  k = 0;
  for (int i = 1; i <= n; i++) k += mas[i][n - i + 1];
  ans += abss(l - k);
  return ans;
}
int main() {
  cin >> n;
  int sum = 0;
  int obr[20][20];
  for (int i = 1; i <= n; i++) {
    for (int j = n; j >= 1; j--) {
      cin >> mas[i][j];
      obr[i][j] = mas[i][j];
      sum += mas[i][j];
    }
  }
  l = sum / n;
  int a, b;
  pair<int, int> rd[30];
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      rd[(i - 1) * n + j] = make_pair(i, j);
    }
  while (1 == 1) {
    for (int i = 1; i <= 30; i++) {
      int ss = rand() % (n * n) + 1, ff = rand() % (n * n) + 1;
      swap(rd[ss], rd[ff]);
    }
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= n; j++) {
        mas[i][j] = obr[rd[(i - 1) * n + j].first][rd[(i - 1) * n + j].second];
      }
    for (int ww = 1; ww <= 100; ww++) {
      a = check();
      if (a == 0) break;
      for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
          for (int z = 1; z <= n; z++) {
            for (int q = 1; q <= n; q++) {
              swap(mas[i][j], mas[z][q]);
              b = check();
              if (b < a)
                a = b;
              else
                swap(mas[i][j], mas[z][q]);
            }
          }
        }
      }
    }
    if (check() == 0) break;
  }
  cout << l << endl;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) cout << mas[i][j] << " ";
    cout << endl;
  }
}
