#include <bits/stdc++.h>
using namespace std;
int matrix[16];
bool hassolution;
int n;
map<long long, bool> DP;
bool find(int vet[16]) {
  int sum = 0;
  for (int i = 0; i < n * n; i += (n + 1)) sum += vet[i];
  int newsum = 0;
  for (int i = 0; i < n * n; i++) {
    newsum += vet[i];
    if ((i + 1) % n == 0) {
      if (newsum != sum) return false;
      newsum = 0;
    }
  }
  for (int i = 0; i < n; i++) {
    int news = 0;
    int j = i;
    while (j < n * n) {
      news += vet[j];
      j += n;
    }
    if (news != sum) return false;
  }
  int ksum = 0;
  for (int i = n - 1; i < n * (n - 1) + 1; i += (n - 1)) {
    ksum += vet[i];
  }
  if (ksum != sum) return false;
  printf("%d\n", sum);
  for (int i = 0; i < n * n; i++) {
    printf("%d ", vet[i]);
    if ((i + 1) % n == 0) printf("\n");
  }
  return true;
}
int ct = 0;
void solve(int mask, int mask2, int vet[16], int lasti) {
  if (hassolution) return;
  long long sumK = 0;
  if (mask == ((1 << (n * n)) - 1) && mask == mask2) {
    for (int i = 0; i < n * n; i++) sumK = (sumK * 10) + vet[i];
    if (DP.find(sumK) != DP.end()) return;
    DP.insert(pair<long long, bool>(sumK, true));
    if (find(vet)) {
      hassolution = true;
      return;
    }
  }
  int ct = 0;
  int newmask = mask, newmask2 = mask2;
  int newsum = 0;
  if (n == 3) {
    for (int i = 0; i < n * n && !hassolution; i++) {
      for (int j = 0; j < n * n; j++) {
        if (i == j) continue;
        for (int k = 0; k < n * n; k++) {
          if (i == j || i == k || j == k) continue;
          if (!(mask2 & (1 << i)) && !(mask2 & (1 << j)) &&
              !(mask2 & (1 << k))) {
            newmask = mask;
            newmask2 = mask2;
            newmask |= (1 << lasti);
            newmask |= (1 << (lasti + 1));
            newmask |= (1 << (lasti + 2));
            vet[lasti] = matrix[i];
            vet[lasti + 1] = matrix[j];
            vet[lasti + 2] = matrix[k];
            newmask2 |= (1 << i);
            newmask2 |= (1 << j);
            newmask2 |= (1 << k);
            solve(newmask, newmask2, vet, lasti + 3);
          }
        }
      }
    }
  }
  if (n == 2) {
    for (int i = 0; i < n * n && !hassolution; i++) {
      for (int j = 0; j < n * n; j++) {
        if (i == j) continue;
        if (!(mask2 & (1 << i)) && !(mask2 & (1 << j))) {
          newmask = mask;
          newmask2 = mask2;
          newmask |= (1 << lasti);
          newmask |= (1 << (lasti + 1));
          vet[lasti] = matrix[i];
          vet[lasti + 1] = matrix[j];
          newmask2 |= (1 << i);
          newmask2 |= (1 << j);
          solve(newmask, newmask2, vet, lasti + 2);
        }
      }
    }
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n * n; i++) scanf("%d", &matrix[i]);
  if (n == 1) {
    printf("%d\n%d\n", matrix[0], matrix[0]);
    return 0;
  }
  int vet[16];
  DP.clear();
  hassolution = false;
  solve(0, 0, vet, 0);
  return 0;
}
