#include <bits/stdc++.h>   using namespace std;   int getint() {     unsigned int c;     int x = 0;     while (((c = getchar()) -  0 ) >= 10) {       if (c ==  - ) return -getint();       if (!~c) exit(0);     }     do {       x = (x << 3) + (x << 1) + (c -  0 );     } while (((c = getchar()) -  0 ) < 10);     return x;   }   int n, nn, sum;   int as[20];   int c[10][10];   bool used[20];   int num[20], have[20], ns;   int perm[20][20][20];   void dfs(int row, int col, int rows, int cols, int dir, int cnt) {     int i, j, k;     if (cnt == nn) {       int tmp1 = 0, tmp2 = 0;       for (i = 0; i < n; i++) {         tmp1 += c[i][i];         tmp2 += c[i][n - 1 - i];       }       if (tmp1 != sum) return;       if (tmp2 != sum) return;       tmp1 = tmp2 = 0;       for (i = 0; i < n; i++) {         tmp1 += c[n - 1][i];         tmp2 += c[i][n - 1];       }       if (tmp1 != sum) return;       if (tmp2 != sum) return;       for (i = 0; i < n; i++) {         for (j = 0; j < n; j++) {           if (j) putchar(   );           printf( %d , c[i][j]);         }         puts(  );       }       exit(0);     }     if (row == n or col == n) {       int tmp = 0;       if (dir == 0) {         for (i = 0; i < n; i++) tmp += c[row][i];         if (tmp != sum) return;       } else {         for (i = 0; i < n; i++) tmp += c[i][col];         if (tmp != sum) return;       }       if (dir == 0) {         dfs(rows + 1, cols, rows + 1, cols, 1, cnt);       } else {         dfs(rows, cols + 1, rows, cols + 1, 0, cnt);       }     }     for (i = 0; i < ns; i++) {       int d = perm[row][col][i];       if (have[d]) {         have[d]--;         c[row][col] = num[d];         if (dir == 0) dfs(row, col + 1, rows, cols, dir, cnt + 1);         if (dir == 1) dfs(row + 1, col, rows, cols, dir, cnt + 1);         have[d]++;       }     }   }   int main() {     int i, j, tcc, tc = 1 << 28;     for (tcc = 0; tcc < tc; tcc++) {       n = getint(), nn = n * n, sum = 0;       for (i = 0; i < nn; i++) as[i] = getint(), sum += as[i];       sum /= n;       for (i = 0; i < nn; i++) num[i] = as[i];       sort(num, num + nn);       ns = unique(num, num + nn) - num;       for (i = 0; i < ns; i++) {         for (j = 0; j < nn; j++)           if (num[i] == as[j]) have[i]++;       }       for (i = 0; i < n; i++)         for (j = 0; j < n; j++) {           for (int k = 0; k < ns; k++) perm[i][j][k] = k;           random_shuffle(perm[i][j], perm[i][j] + ns);         }       printf( %d n , sum);       dfs(0, 0, 0, 0, 0, 0);     }     return 0;   }   