#include <bits/stdc++.h>
using namespace std;
int N, M, S;
int x[20];
int a[10][10];
int func(int mask, int val) {
  int i;
  for ((i) = 0; (i) < (int)(M); (i)++)
    if (((mask) & (1 << (i))))
      if (x[i] == val) return i;
  return -1;
}
bool dfs(int pos, int mask) {
  int i, j;
  if (pos == 8) {
    for ((i) = 0; (i) < (int)(4); (i)++)
      for ((j) = 0; (j) < (int)(4); (j)++) {
        cout << a[i][j];
        if (j == 3)
          cout << endl;
        else
          cout << ' ';
      }
    return true;
  }
  if (pos == 0) {
    for ((i) = 0; (i) < (int)(M); (i)++)
      if (((mask) & (1 << (i)))) {
        a[0][1] = x[i];
        if (dfs(pos + 1, (mask ^ (1 << i)))) return true;
      }
  } else if (pos == 1) {
    int next = func(mask, S - a[0][0] - a[0][1] - a[0][3]);
    if (next != -1) {
      a[0][2] = x[next];
      if (dfs(pos + 1, (mask ^ (1 << next)))) return true;
    }
  } else if (pos == 2) {
    int next = func(mask, S - a[0][1] - a[1][1] - a[2][1]);
    if (next != -1) {
      a[3][1] = x[next];
      if (dfs(pos + 1, (mask ^ (1 << next)))) return true;
    }
  } else if (pos == 3) {
    int next = func(mask, S - a[0][2] - a[1][2] - a[2][2]);
    if (next != -1) {
      a[3][2] = x[next];
      if (dfs(pos + 1, (mask ^ (1 << next)))) return true;
    }
  } else if (pos == 4) {
    for ((i) = 0; (i) < (int)(M); (i)++)
      if (((mask) & (1 << (i)))) {
        a[1][0] = x[i];
        if (dfs(pos + 1, (mask ^ (1 << i)))) return true;
      }
  } else if (pos == 5) {
    int next = func(mask, S - a[1][0] - a[1][1] - a[1][2]);
    if (next != -1) {
      a[1][3] = x[next];
      if (dfs(pos + 1, (mask ^ (1 << next)))) return true;
    }
  } else if (pos == 6) {
    int next = func(mask, S - a[0][0] - a[1][0] - a[3][0]);
    if (next != -1) {
      a[2][0] = x[next];
      if (dfs(pos + 1, (mask ^ (1 << next)))) return true;
    }
  } else if (pos == 7) {
    int next = func(mask, S - a[0][3] - a[1][3] - a[3][3]);
    if (next != -1) {
      a[2][3] = x[next];
      if (dfs(pos + 1, (mask ^ (1 << next)))) return true;
    }
  }
  return false;
}
bool check(void) {
  int i, j, tmp;
  for ((i) = 0; (i) < (int)(N); (i)++) {
    tmp = 0;
    for ((j) = 0; (j) < (int)(N); (j)++) tmp += a[i][j];
    if (tmp != S) return false;
  }
  for ((j) = 0; (j) < (int)(N); (j)++) {
    tmp = 0;
    for ((i) = 0; (i) < (int)(N); (i)++) tmp += a[i][j];
    if (tmp != S) return false;
  }
  tmp = 0;
  for ((i) = 0; (i) < (int)(N); (i)++) tmp += a[i][i];
  if (tmp != S) return false;
  tmp = 0;
  for ((i) = 0; (i) < (int)(N); (i)++) tmp += a[i][N - 1 - i];
  if (tmp != S) return false;
  return true;
}
int main2(void) {
  int i, j;
  for ((i) = 0; (i) < (int)(N * N); (i)++) cin >> x[i];
  sort(x, x + N * N);
  for ((i) = 0; (i) < (int)(N * N); (i)++) S += x[i];
  S /= N;
  cout << S << endl;
  do {
    for ((i) = 0; (i) < (int)(N); (i)++)
      for ((j) = 0; (j) < (int)(N); (j)++) a[i][j] = x[i * N + j];
    if (check()) {
      for ((i) = 0; (i) < (int)(N); (i)++) {
        for ((j) = 0; (j) < (int)(N); (j)++) {
          cout << a[i][j];
          if (j == N - 1)
            cout << endl;
          else
            cout << ' ';
        }
      }
      return 0;
    }
  } while (next_permutation(x, x + N * N));
  return 0;
}
int main(void) {
  int i, j, k, l, p, q, r, s;
  cin >> N;
  if (N <= 3) {
    main2();
    return 0;
  }
  M = N * N;
  for ((i) = 0; (i) < (int)(M); (i)++) cin >> x[i];
  sort(x, x + M);
  for ((i) = 0; (i) < (int)(M); (i)++) S += x[i];
  S /= N;
  cout << S << endl;
  for ((k) = 0; (k) < (int)(M); (k)++)
    for ((j) = 0; (j) < (int)(k); (j)++)
      for ((i) = 0; (i) < (int)(j); (i)++) {
        a[0][0] = x[i];
        a[0][3] = x[j];
        a[3][0] = x[k];
        int mask = (((1 << M) - 1) ^ (1 << i) ^ (1 << j) ^ (1 << k));
        l = func(mask, S - x[i] - x[j] - x[k]);
        if (l == -1 || l < i) continue;
        a[3][3] = x[l];
        mask ^= (1 << l);
        for ((p) = 0; (p) < (int)(M); (p)++)
          if (((mask) & (1 << (p)))) {
            a[1][1] = x[p];
            int mask2 = (mask ^ (1 << p));
            s = func(mask2, S - a[0][0] - a[1][1] - a[3][3]);
            if (s == -1) continue;
            a[2][2] = x[s];
            mask2 ^= (1 << s);
            for ((q) = 0; (q) < (int)(M); (q)++)
              if (((mask2) & (1 << (q)))) {
                a[1][2] = x[q];
                int mask3 = (mask2 ^ (1 << q));
                r = func(mask3, S - a[0][3] - a[1][2] - a[3][0]);
                if (r == -1) continue;
                a[2][1] = x[r];
                mask3 ^= (1 << r);
                if (dfs(0, mask3)) return 0;
              }
          }
      }
  return 0;
}
