#include <bits/stdc++.h>
using namespace std;
int arr[50], n, s;
int ma[5][5];
int sum_row[5];
int sum_col[5];
map<int, int> freq;
vector<map<int, int>::iterator> its;
set<int> oi;
void go(int x, int y) {
  if (x == n) {
    int s1 = 0, s2 = 0;
    for (int i = 0; i < n; ++i) {
      s1 += ma[i][i];
      s2 += ma[n - i - 1][i];
    }
    if (s1 != s || s2 != s) return;
    for (int i = 0; i < n; ++i) {
      for (int j = 0; j < n; ++j) {
        cout << ma[i][j];
        if (j + 1 < n) cout << ' ';
      }
      cout << '\n';
    }
    exit(0);
  }
  if (x == n - 1 && y == n - 1) {
    if (sum_row[x] != sum_col[y]) return;
  }
  if (x == n - 1) {
    if (freq.count(s - sum_col[y]) && freq[s - sum_col[y]] > 0) {
      ma[x][y] = s - sum_col[y];
      --freq[ma[x][y]];
      sum_row[x] += ma[x][y];
      if (y == n - 1)
        go(x + 1, 0);
      else
        go(x, y + 1);
      ++freq[ma[x][y]];
      sum_row[x] -= ma[x][y];
    }
    return;
  }
  if (y == n - 1) {
    if (freq.count(s - sum_row[x]) && freq[s - sum_row[x]] > 0) {
      ma[x][y] = s - sum_row[x];
      --freq[ma[x][y]];
      sum_col[y] += ma[x][y];
      go(x + 1, 0);
      ++freq[ma[x][y]];
      sum_col[y] -= ma[x][y];
    }
    return;
  }
  for (auto &v : its) {
    if (v->second > 0) {
      ma[x][y] = v->first;
      --v->second;
      sum_row[x] += v->first;
      sum_col[y] += v->first;
      go(x, y + 1);
      ++v->second;
      sum_row[x] -= v->first;
      sum_col[y] -= v->first;
    }
  }
}
int main() {
  srand(time(NULL));
  cin >> n;
  for (int i = 0; i < n * n; ++i) {
    cin >> arr[i];
    ++freq[arr[i]];
    s += arr[i];
    oi.insert(arr[i]);
  }
  for (auto x : oi) {
    its.push_back(freq.find(x));
  }
  random_shuffle(its.begin(), its.end());
  s /= n;
  cout << s << '\n';
  go(0, 0);
  return 0;
}
