#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:16777216")
using namespace std;
int n, m;
int a[16];
int d[4][4];
int a1[4], a2[4], a3[8];
int c1, c2, c3;
bool used[8];
vector<pair<int, int> > Q;
int Find(int val) {
  for (int i = 0, _n = (8); i < _n; ++i)
    if (!used[i] && a3[i] == val) return i;
  return -1;
}
bool solve(int sum) {
  for (int i = 0, _n = (4); i < _n; ++i) d[i][i] = a1[i];
  for (int i = 0, _n = (4); i < _n; ++i) d[4 - i - 1][i] = a2[i];
  for (int i = 0; i < 8; i++) {
    for (int j = 0; j < 8; j++)
      if (i != j) {
        memset((used), (0), sizeof((used)));
        used[i] = used[j] = true;
        d[0][1] = a3[i];
        d[1][0] = a3[j];
        int row = d[0][0] + d[0][1] + d[0][3];
        int col = d[0][0] + d[1][0] + d[3][0];
        int idx = Find(sum - row);
        if (idx == -1) return false;
        used[idx] = true;
        d[0][2] = a3[idx];
        idx = Find(sum - col);
        if (idx == -1) return false;
        used[idx] = true;
        d[2][0] = a3[idx];
        idx = Find(sum - d[0][1] - d[1][1] - d[2][1]);
        if (idx == -1) return false;
        used[idx] = true;
        d[3][1] = a3[idx];
        idx = Find(sum - d[0][2] - d[1][2] - d[2][2]);
        if (idx == -1) return false;
        used[idx] = true;
        d[3][2] = a3[idx];
        idx = Find(sum - d[1][0] - d[1][1] - d[1][2]);
        if (idx == -1) return false;
        used[idx] = true;
        d[1][3] = a3[idx];
        idx = Find(sum - d[2][0] - d[2][1] - d[1][2]);
        if (idx == -1) return false;
        used[idx] = true;
        d[2][3] = a3[idx];
        if (d[3][0] + d[3][1] + d[3][2] + d[3][3] != sum) return false;
        if (d[0][3] + d[1][3] + d[2][3] + d[3][3] != sum) return false;
        cout << sum << endl;
        for (int i = 0, _n = (n); i < _n; ++i) {
          for (int j = 0, _n = (n); j < _n; ++j) cout << d[i][j] << " ";
          cout << endl;
        }
        return true;
      }
  }
  return false;
}
bool solved(pair<int, int> A, pair<int, int> B) {
  c1 = c2 = c3 = 0;
  for (int i = 0, _n = (m); i < _n; ++i) {
    if ((A.second >> i) & 1)
      a1[c1++] = a[i];
    else if ((B.second >> i) & 1)
      a2[c2++] = a[i];
    else {
      a3[c3++] = a[i];
    }
  }
  sort(a1, a1 + 4);
  sort(a2, a2 + 4);
  do {
    do {
      if (solve(A.first)) return true;
    } while (next_permutation(a2, a2 + 4));
  } while (next_permutation(a1, a1 + 4));
  return false;
}
bool solve4() {
  for (int i1 = 0; i1 < m; i1++)
    for (int i2 = i1 + 1; i2 < m; i2++)
      for (int i3 = i2 + 1; i3 < m; i3++)
        for (int i4 = i3 + 1; i4 < m; i4++) {
          int mask = (1 << i1) | (1 << i2) | (1 << i3) | (1 << i4);
          int sum = a[i1] + a[i2] + a[i3] + a[i4];
          Q.push_back(pair<int, int>(sum, mask));
        }
  sort((Q).begin(), (Q).end());
  for (int i = 0; i < (int)((Q).size()); i++) {
    int j = i;
    while (j + 1 < (int)((Q).size()) && Q[j + 1].first == Q[i].first) j++;
    for (int i1 = i; i1 < j; i1++)
      for (int i2 = i1; i2 < j; i2++)
        if ((Q[i1].second & Q[i2].second) == 0 && solved(Q[i1], Q[i2]))
          return true;
    i = j;
  }
  return false;
}
void solution() {
  cin >> n;
  for (int i = 0, _n = (n * n); i < _n; ++i) cin >> a[i];
  m = n * n;
  sort(a, a + m);
  if (n == 1) {
    cout << a[0] << endl;
    cout << a[0] << endl;
  } else if (n == 2) {
    do {
      for (int i = 0, _n = (m); i < _n; ++i) d[i / n][i % n] = a[i];
      int s = d[0][0] + d[0][1];
      int s2 = d[1][0] + d[1][1];
      int s3 = d[0][0] + d[1][0];
      int s4 = d[0][1] + d[1][1];
      int s5 = d[0][0] + d[1][1];
      int s6 = d[0][1] + d[1][0];
      if (s != s2 || s != s3 || s != s4 || s != s5 || s != s6) continue;
      cout << s << endl;
      for (int i = 0, _n = (n); i < _n; ++i) {
        for (int j = 0, _n = (n); j < _n; ++j) cout << d[i][j] << " ";
        cout << endl;
      }
      break;
    } while (next_permutation(a, a + m));
  } else if (n == 3) {
    do {
      for (int i = 0, _n = (m); i < _n; ++i) d[i / n][i % n] = a[i];
      int s = d[0][0] + d[0][1] + d[0][2];
      int s2 = d[1][0] + d[1][1] + d[1][2];
      int s3 = d[2][0] + d[2][1] + d[2][2];
      int s4 = d[0][0] + d[1][0] + d[2][0];
      int s5 = d[0][1] + d[1][1] + d[2][1];
      int s6 = d[0][2] + d[1][2] + d[2][2];
      int s7 = d[0][0] + d[1][1] + d[2][2];
      int s8 = d[0][2] + d[1][1] + d[2][0];
      if (s != s2 || s != s3 || s != s4 || s != s5 || s != s6 || s != s7 ||
          s != s8)
        continue;
      cout << s << endl;
      for (int i = 0, _n = (n); i < _n; ++i) {
        for (int j = 0, _n = (n); j < _n; ++j) cout << d[i][j] << " ";
        cout << endl;
      }
      break;
    } while (next_permutation(a, a + m));
  } else if (n == 4) {
    if (!solve4()) throw 1;
  }
}
int main() {
  solution();
  return 0;
}
