#include <bits/stdc++.h>
using namespace std;
int total;
int ps[32];
int N;
int num[32];
int rs[32];
map<int, int> table;
int board[8][8];
const int INF = 1000000000;
void go(int x, int y, int g) {
  if (x == N) throw g;
  if (x == N - 1) {
    int v = 0;
    for (int i = 0; i < N - 1; i++) v += board[i][y];
    int p = g - v;
    map<int, int>::iterator it = table.find(p);
    if (it == table.end() || !it->second) return;
    if (y == 0) {
      v = 0;
      for (int i = 0; i < N - 1; i++) v += board[i][N - 1 - i];
      if (g - v != p) return;
    }
    if (y == N - 1) {
      v = 0;
      for (int i = 0; i < N - 1; i++) v += board[i][i];
      if (g - v != p) return;
      v = 0;
      for (int i = 0; i < N - 1; i++) v += board[N - 1][i];
      if (g - v != p) return;
    }
    it->second--;
    board[x][y] = it->first;
    go(x + (y == N - 1), (y + 1) % N, g);
    it->second++;
  } 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;
    map<int, int>::iterator it = table.find(p);
    if (it == table.end() || !it->second) return;
    it->second--;
    board[x][y] = it->first;
    go(x + 1, 0, g);
    it->second++;
  } else {
    for (map<int, int>::iterator it = table.begin(); it != table.end(); it++)
      if (it->second) {
        board[x][y] = it->first;
        it->second--;
        if (y == N - 1) {
          g = 0;
          for (int i = 0; i < N; i++) g += board[0][i];
          go(x + 1, 0, g);
        } else
          go(x, y + 1, g);
        it->second++;
      }
  }
}
int main() {
  scanf("%d", &N);
  for (int i = 0; i < N * N; i++) {
    scanf("%d", ps + i);
    table[ps[i]]++;
  }
  if (N == 1) printf("%d\n%d\n", ps[0], ps[0]);
  try {
    go(0, 0, 0);
  } catch (int v) {
    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;
}
