#include <bits/stdc++.h>
using namespace std;
int sqbf[3][3];
void Check(int n, vector<int> order) {
  int tot = 0;
  for (int(i) = 0; (i) < (n * n); ++(i)) tot += order[i];
  int piece = tot / n;
  for (int(i) = 0; (i) < (n); ++(i))
    for (int(j) = 0; (j) < (n); ++(j)) sqbf[i][j] = order[i * n + j];
  for (int(i) = 0; (i) < (n); ++(i)) {
    int sum1 = 0;
    int sum2 = 0;
    for (int(j) = 0; (j) < (n); ++(j)) {
      sum1 += sqbf[i][j];
      sum2 += sqbf[j][i];
    }
    if (sum1 != piece || sum2 != piece) return;
  }
  int sum1 = 0;
  int sum2 = 0;
  for (int(i) = 0; (i) < (n); ++(i)) {
    sum1 += sqbf[i][i];
    sum2 += sqbf[i][n - i - 1];
  }
  if (sum1 != piece || sum2 != piece) return;
  cout << piece << endl;
  for (int(i) = 0; (i) < (n); ++(i)) {
    for (int(j) = 0; (j) < (n); ++(j)) {
      if (j) cout << " ";
      cout << sqbf[i][j];
    }
    cout << endl;
  }
  exit(0);
}
char yes[205000000];
int vals[18];
int jml;
int sq[18];
int wan;
void DfsDone() {
  cout << (wan - 400000000) << endl;
  for (int(i) = 0; (i) < (4); ++(i)) {
    for (int(j) = 0; (j) < (4); ++(j)) {
      if (j) cout << " ";
      cout << (sq[i * 4 + j] - 100000000);
    }
    cout << endl;
  }
  exit(0);
}
void Dfs12() {
  if (sq[12] + sq[9] + sq[6] + sq[3] != wan) return;
  if (sq[4] + sq[5] + sq[6] + sq[7] != wan) return;
  DfsDone();
}
void Dfs11() {
  int mau = wan - sq[0] - sq[8] - sq[12];
  if (mau < 0 || mau > 200000000 || !yes[mau]) return;
  yes[mau]--;
  sq[4] = mau;
  Dfs12();
  yes[mau]++;
}
void Dfs10() {
  int mau = wan - sq[13] - sq[14] - sq[15];
  if (mau < 0 || mau > 200000000 || !yes[mau]) return;
  yes[mau]--;
  sq[12] = mau;
  Dfs11();
  yes[mau]++;
}
void Dfs9() {
  int mau = wan - sq[2] - sq[6] - sq[10];
  if (mau < 0 || mau > 200000000 || !yes[mau]) return;
  yes[mau]--;
  sq[14] = mau;
  Dfs10();
  yes[mau]++;
}
void Dfs8() {
  int mau = wan - sq[0] - sq[1] - sq[3];
  if (mau < 0 || mau > 200000000 || !yes[mau]) return;
  yes[mau]--;
  sq[2] = mau;
  for (int i = 0; i < jml; ++i) {
    if (yes[vals[i]]) {
      sq[6] = vals[i];
      yes[vals[i]]--;
      Dfs9();
      yes[vals[i]]++;
    }
  }
  yes[mau]++;
}
void Dfs7b() {
  int mau = wan - sq[7] - sq[11] - sq[15];
  if (mau < 0 || mau > 200000000 || !yes[mau]) return;
  yes[mau]--;
  sq[3] = mau;
  Dfs8();
  yes[mau]++;
}
void Dfs7() {
  int mau = wan - sq[8] - sq[9] - sq[10];
  if (mau < 0 || mau > 200000000 || !yes[mau]) return;
  yes[mau]--;
  sq[11] = mau;
  for (int i = 0; i < jml; ++i) {
    if (yes[vals[i]]) {
      sq[7] = vals[i];
      yes[vals[i]]--;
      Dfs7b();
      yes[vals[i]]++;
    }
  }
  yes[mau]++;
}
void Dfs6() {
  int mau = wan - sq[5] - sq[9] - sq[13];
  if (mau < 0 || mau > 200000000 || !yes[mau]) return;
  yes[mau]--;
  sq[1] = mau;
  for (int i = 0; i < jml; ++i) {
    if (yes[vals[i]]) {
      sq[8] = vals[i];
      yes[vals[i]]--;
      Dfs7();
      yes[vals[i]]++;
    }
  }
  yes[mau]++;
}
void Dfs5() {
  for (int i = 0; i < jml; ++i) {
    if (yes[vals[i]]) {
      sq[13] = vals[i];
      yes[vals[i]]--;
      Dfs6();
      yes[vals[i]]++;
    }
  }
}
void Dfs4() {
  int mau = wan - sq[5] - sq[10] - sq[15];
  if (mau < 0 || mau > 200000000 || !yes[mau]) return;
  yes[mau]--;
  sq[0] = mau;
  for (int i = 0; i < jml; ++i) {
    if (yes[vals[i]]) {
      sq[9] = vals[i];
      yes[vals[i]]--;
      Dfs5();
      yes[vals[i]]++;
    }
  }
  yes[mau]++;
}
void Dfs3() {
  for (int i = 0; i < jml; ++i) {
    if (yes[vals[i]]) {
      sq[15] = vals[i];
      yes[vals[i]]--;
      Dfs4();
      yes[vals[i]]++;
    }
  }
}
void Dfs2() {
  for (int i = 0; i < jml; ++i) {
    if (yes[vals[i]] && vals[i] >= sq[5]) {
      sq[10] = vals[i];
      yes[vals[i]]--;
      Dfs3();
      yes[vals[i]]++;
    }
  }
}
void Dfs1() {
  for (int i = 0; i < jml; ++i) {
    sq[5] = vals[i];
    yes[vals[i]]--;
    Dfs2();
    yes[vals[i]]++;
  }
}
int main() {
  int n;
  cin >> n;
  if (n <= 3) {
    vector<int> z;
    for (int(i) = 0; (i) < (n * n); ++(i)) {
      int a;
      cin >> a;
      z.push_back(a);
    }
    sort(z.begin(), z.end());
    do {
      Check(n, z);
    } while (next_permutation(z.begin(), z.end()));
    exit(0);
  }
  long long sub = 0LL;
  for (int(i) = 0; (i) < (n * n); ++(i)) {
    int z;
    cin >> z;
    z += 100000000;
    yes[z]++;
    vals[i] = z;
    sub += (long long)z;
  }
  wan = (int)((long long)sub / (long long)n);
  for (int(i) = 0; (i) < (16); ++(i)) sq[i] = 100000000;
  sort(vals, vals + n * n);
  jml = unique(vals, vals + n * n) - vals;
  srand(1234567);
  random_shuffle(vals, vals + jml);
  Dfs1();
}
