#include <bits/stdc++.h>
using namespace std;
int n, a[17], b[5][5];
long long sum;
map<long long, int> M;
bool check() {
  for (int j = 1; j <= n; ++j) {
    int t = 0;
    for (int i = 1; i <= n; ++i) {
      t += b[i][j];
    }
    if (t != sum) return false;
  }
  int t = 0;
  for (int i = 1; i <= n; ++i) {
    t += b[i][i];
  }
  if (t != sum) return false;
  t = 0;
  for (int i = 1; i <= n; ++i) {
    t += b[i][n - i + 1];
  }
  if (t != sum) return false;
  cout << sum << endl;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      cout << b[i][j];
      if (j == n) {
        cout << endl;
      } else {
        cout << ' ';
      }
    }
  }
  return true;
}
bool dfs(int i, int j, long long tsum) {
  if (i == n + 1) {
    if (check()) return true;
    return false;
  } else {
    if (j == n) {
      long long r = sum - tsum;
      if (M[r] == 0) return false;
      --M[r];
      b[i][j] = r;
      if (dfs(i + 1, 1, 0)) return true;
      ++M[r];
      return false;
    }
    for (map<long long, int>::iterator it = M.begin(); it != M.end(); ++it) {
      if (it->second) {
        --M[it->first];
        b[i][j] = it->first;
        if (dfs(i, j + 1, tsum + it->first)) return true;
        ++M[it->first];
      }
    }
    return false;
  }
}
int main() {
  cin >> n;
  for (int i = 1, k = 0; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      cin >> a[++k];
      M[a[k]] += 1;
    }
  }
  sort(a + 1, a + 1 + n * n);
  for (int i = 1, k = 0; i <= n; ++i)
    for (int j = 1; j <= n; ++j) sum += a[++k];
  sum /= n;
  dfs(1, 1, 0);
  return 0;
}
