#include <bits/stdc++.h>
using namespace std;
int sum = 0;
int total;
int ps[32];
int N;
int num[32];
int rs[32];
int board[8][8];
int p1[32];
int p2[32];
int xs[32];
int ys[32];
inline int pick(int x) {
  if (!rs[x]) return 0;
  if (--rs[x] == 0) {
    p2[p1[x]] = p2[x];
    p1[p2[x]] = p1[x];
  }
  return x;
}
inline void put(int x) {
  if (rs[x]++ == 0) {
    p2[p1[x]] = x;
    p1[p2[x]] = x;
  }
}
inline int find(int v) {
  int l = 0, r = total;
  while (l + 1 < r) {
    int m = (l + r) / 2;
    if (num[m] == v)
      return pick(m);
    else if (num[m] < v)
      l = m;
    else
      r = m;
  }
  return 0;
}
bool go(int x, int y, int g) {
  if (x == N) return true;
  if (x == N - 1) {
    int v = 0;
    for (int i = 0; i < N - 1; i++) v += board[i][y];
    int p = g - v;
    int z = find(p);
    if (z) put(z);
    if (!z) return false;
    if (y == 0) {
      v = 0;
      for (int i = 0; i < N - 1; i++) v += board[i][N - 1 - i];
      if (g - v != p) return false;
    }
    if (y == N - 1) {
      v = 0;
      for (int i = 0; i < N - 1; i++) v += board[i][i];
      if (g - v != p) return false;
      v = 0;
      for (int i = 0; i < N - 1; i++) v += board[N - 1][i];
      if (g - v != p) return false;
    }
    pick(z);
    board[x][y] = p;
    if (go(x + (y == N - 1), (y == N - 1) ? 0 : (y + 1), g)) return true;
    put(z);
  } else if (y == N - 1 && (x != 0)) {
    int v = 0;
    for (int i = 0; i < N - 1; i++) v += board[x][i];
    int p = g - v;
    int z = find(p);
    if (z) put(z);
    if (!z) return false;
    pick(z);
    board[x][y] = p;
    if (go(x + 1, 0, g)) return true;
    put(z);
  } else {
    for (int z = p2[0]; z; z = p2[z]) {
      board[x][y] = num[z];
      pick(z);
      if (y == N - 1) {
        g = 0;
        for (int i = 0; i < N; i++) g += board[0][i];
        if (g == sum / N && go(x + 1, 0, g)) return true;
      } else if (go(x, y + 1, g))
        return true;
      put(z);
    }
  }
  return false;
}
int main() {
  scanf("%d", &N);
  for (int i = 0; i < N * N; i++) scanf("%d", ps + i), sum += ps[i];
  if (N == 1) {
    printf("%d\n%d\n", ps[0], ps[0]);
    return 0;
  }
  sort(ps, ps + N * N);
  total = 1;
  for (int i = 0; i < N * N; i++)
    if (!i || ps[i] != num[total - 1]) {
      num[total] = ps[i];
      rs[total] = 1;
      total++;
    } else
      rs[total - 1]++;
  p2[0] = 1;
  for (int i = 1; i < total; i++) {
    if (i) p1[i] = i - 1;
    p2[i] = i + 1;
  }
  p2[total - 1] = 0;
  go(0, 0, 0);
  int v = 0;
  for (int i = 0; i < N; i++) v += board[0][i];
  printf("%d\n", v);
  for (int i = 0; i < N; i++, printf("\n"))
    for (int j = 0; j < N; j++) {
      if (j) printf(" ");
      printf("%d", board[i][j]);
    }
  return 0;
}
