#include <bits/stdc++.h>
using namespace std;
const int MAX = 21;
vector<long long> v;
long long a[MAX], n, su = 0, d, b[MAX][MAX];
bool vis[MAX];
map<long long, int> mp;
void f3(int y) {
  if (y == 6) {
    long long sum = v[0] + v[1] + v[2];
    v.push_back(sum - v[0] - v[3]);
    mp[sum - v[0] - v[3]]--;
    v.push_back(sum - v[1] - v[4]);
    mp[sum - v[1] - v[4]]--;
    v.push_back(sum - v[2] - v[5]);
    mp[sum - v[2] - v[5]]--;
    if (mp[sum - v[2] - v[5]] < 0 ||
        (mp[sum - v[1] - v[4]] < 0 || mp[sum - v[0] - v[3]] < 0)) {
      mp[sum - v[0] - v[3]]++;
      mp[sum - v[1] - v[4]]++;
      mp[sum - v[2] - v[5]]++;
      v.pop_back();
      v.pop_back();
      v.pop_back();
      return;
    }
    if (v[3] + v[4] + v[5] != sum ||
        (v[6] + v[7] + v[8] != sum ||
         (v[0] + v[4] + v[8] != sum || v[2] + v[4] + v[6] != sum))) {
      mp[sum - v[0] - v[3]]++;
      mp[sum - v[1] - v[4]]++;
      mp[sum - v[2] - v[5]]++;
      v.pop_back();
      v.pop_back();
      v.pop_back();
      return;
    }
    cout << sum << "\n";
    for (int i = 0; i < 8; i += 3)
      cout << v[i] << " " << v[i + 1] << " " << v[i + 2] << "\n";
    exit(0);
  }
  for (int i = 0; i < n * n; i++) {
    if (!vis[i]) {
      vis[i] = 1;
      mp[a[i]]--;
      v.push_back(a[i]);
      f3(y + 1);
      v.pop_back();
      vis[i] = 0;
      mp[a[i]]++;
    }
  }
}
void f4(int x) {
  if (x == 3) {
    int y = d - v[0] - v[1] - v[2];
    if (mp[y] - 1 < 0) return;
    mp[y]--;
    v.push_back(y);
    f4(x + 1);
    mp[y]++;
    v.pop_back();
    return;
  }
  if (x == 6) {
    int y = d - v[3] - v[4] - v[5];
    if (mp[y] - 1 < 0) return;
    mp[y]--;
    v.push_back(y);
    f4(x + 1);
    mp[y]++;
    v.pop_back();
    return;
  }
  if (x == 8) {
    int y = d - v[7] - v[2] - v[4];
    if (mp[y] - 1 < 0) return;
    mp[y]--;
    v.push_back(y);
    f4(x + 1);
    mp[y]++;
    v.pop_back();
    return;
  }
  if (x == 10) {
    int y = d - v[0] - v[8] - v[9];
    if (mp[y] - 1 < 0) return;
    mp[y]--;
    v.push_back(y);
    int z = d - v[5] - v[1] - v[10];
    if (mp[z] - 1 < 0 || v[9] + v[7] + z + v[6] != d) {
      mp[y]++;
      v.pop_back();
      return;
    }
    mp[z]--;
    v.push_back(z);
    f4(x + 2);
    mp[z]++;
    mp[y]++;
    v.pop_back();
    v.pop_back();
    return;
  }
  if (x == 13) {
    int y = d - v[0] - v[12] - v[6], z = d - v[12] - v[1] - v[7];
    mp[z]--;
    mp[y]--;
    if (mp[y] < 0 || mp[z] < 0) {
      mp[z]++;
      mp[y]++;
      return;
    }
    v.push_back(z);
    v.push_back(y);
    if (mp[d - v[9] - v[13] - v[3]] <= 0) {
      v.pop_back();
      v.pop_back();
      mp[z]++;
      mp[y]++;
      return;
    }
    v.push_back(d - v[9] - v[13] - v[3]);
    cout << d << "\n";
    cout << v[0] << " " << v[10] << " " << v[8] << " " << v[9] << "\n"
         << v[12] << " " << v[1] << " " << v[7] << " " << v[13] << "\n";
    cout << v[14] << " " << v[11] << " " << v[2] << " " << v[15] << "\n"
         << v[6] << " " << v[5] << " " << v[4] << " " << v[3];
    exit(0);
  }
  for (int i = 0; i < 16; i++) {
    if (!vis[i]) {
      if (mp[a[i]] - 1 >= 0) {
        mp[a[i]]--;
        vis[i] = 1;
        v.push_back(a[i]);
        f4(x + 1);
        v.pop_back();
        vis[i] = 0;
        mp[a[i]]++;
      }
    }
  }
}
int main() {
  cin >> n;
  for (int i = 0; i < n * n; i++) {
    cin >> a[i];
    mp[a[i]]++;
    su += a[i];
  }
  d = su / n;
  if (n == 1) return cout << a[0] << "\n" << a[0], 0;
  if (n == 2) {
    cout << a[0] + a[0] << "\n";
    cout << a[0] << " " << a[0] << "\n" << a[0] << " " << a[0];
  } else if (n == 3)
    f3(0);
  else
    f4(0);
  return 0;
}
