func_code_string: #include <bits/stdc++.h>   using namespace std;   int n;   int p[4][4];   int a[(1 << 16)];   int sum1[4];   int sum2[4];   int dio1, dio2;   bool ok;   int mask;   void dfs(int x) {     int i, j;     if (x == n * n) {       if (dio1 == dio2 && dio1 == sum1[0] && sum1[1] == dio1 && sum1[2] == dio1 &&           sum2[0] == dio1 && sum2[1] == dio1 && sum2[2] == dio1) {         ok = true;         printf( %d n , dio1);         for (i = 0; i < n; i++) {           printf( %d , p[i][0]);           for (j = 1; j < n; j++) printf(  %d , p[i][j]);           printf(  n );         }       }       return;     }     for (i = 0; i < n * n && !ok; i++)       if ((mask & (1 << i)) == 0) {         mask |= (1 << i);         p[x / n][x % n] = a[i];         sum1[x / n] += a[i];         sum2[x % n] += a[i];         if (x / n == x % n) dio1 += a[i];         if (x == 2 || x == 4 || x == 6) dio2 += a[i];         dfs(x + 1);         sum1[x / n] -= a[i];         sum2[x % n] -= a[i];         if (x / n == x % n) dio1 -= a[i];         if (x == 2 || x == 4 || x == 6) dio2 -= a[i];         mask ^= (1 << i);       }   }   void dfs2(int x) {     int i, j;     if (x == n * n) {       if (dio1 == dio2 && dio1 == sum1[0] && sum1[1] == dio1 && sum2[0] == dio1 &&           sum2[1] == dio1) {         ok = true;         printf( %d n , dio1);         for (i = 0; i < n; i++) {           printf( %d , p[i][0]);           for (j = 1; j < n; j++) printf(  %d , p[i][j]);           printf(  n );         }       }       return;     }     for (i = 0; i < n * n && !ok; i++)       if ((mask & (1 << i)) == 0) {         mask |= (1 << i);         p[x / n][x % n] = a[i];         sum1[x / n] += a[i];         sum2[x % n] += a[i];         if (x / n == x % n) dio1 += a[i];         if (x == 1 || x == 2) dio2 += a[i];         dfs2(x + 1);         sum1[x / n] -= a[i];         sum2[x % n] -= a[i];         if (x / n == x % n) dio1 -= a[i];         if (x == 1 || x == 2) dio2 -= a[i];         mask ^= (1 << i);       }   }   int sum;   void super_dfs(int x) {     int i, j;     if (x == 16) {       if (dio1 == dio2 && dio1 == sum1[0] && dio1 == sum1[3])         if (dio1 == sum2[1]) {           ok = true;           printf( %d n , dio1);           for (i = 0; i < n; i++) {             printf( %d , p[i][0]);             for (j = 1; j < n; j++) printf(  %d , p[i][j]);             printf(  n );           }         }       return;     }     int tem;     int znac;     if (x > 3 && sum1[0] != sum) return;     if (x == 7) {       if (ok) return;       tem = (1 << 16) - 1;       tem ^= mask;       while (tem > 0) {         znac = tem - (tem & (tem - 1));         if (a[znac] == sum1[0] - sum1[1]) {           mask |= znac;           p[1][3] = a[znac];           sum1[1] = sum1[0];           sum2[3] += a[znac];           super_dfs(x + 1);           sum1[1] -= a[znac];           sum2[3] -= a[znac];           mask ^= znac;           break;         }         tem &= (tem - 1);       }       return;     }     if (x == 8) {       tem = (1 << 16) - 1;       tem ^= mask;       while (tem > 0 && !ok) {         znac = tem - (tem & (tem - 1));         mask |= znac;         p[(x >> 2)][(x & 3)] = a[znac];         sum1[(x >> 2)] += a[znac];         sum2[(x & 3)] += a[znac];         if ((x >> 2) == (x & 3)) dio1 += a[znac];         if (x == 3 || x == 6 || x == 12) dio2 += a[znac];         int tt = (1 << 16) - 1;         tt ^= mask;         while (tt > 0) {           int zc = tt - (tt & (tt - 1));           if (a[zc] + sum2[0] == sum) {             sum2[0] = sum;             sum1[3] += a[zc];             dio2 += a[zc];             mask |= zc;             p[3][0] = a[zc];             super_dfs(x + 1);             dio2 -= a[zc];             sum2[0] -= a[zc];             sum1[3] -= a[zc];             mask ^= zc;           }           tt &= (tt - 1);         }         if ((x >> 2) == (x & 3)) dio1 -= a[znac];         if (x == 3 || x == 6 || x == 12) dio2 -= a[znac];         sum1[(x >> 2)] -= a[znac];         sum2[(x & 3)] -= a[znac];         mask ^= znac;         tem &= (tem - 1);       }       return;     }     if (x == 9) {       if (ok) return;       tem = (1 << 16) - 1;       tem ^= mask;       while (tem > 0) {         znac = tem - (tem & (tem - 1));         if (a[znac] == sum2[0] - dio2) {           mask |= znac;           p[2][1] = a[znac];           sum2[1] += a[znac];           sum1[2] += a[znac];           dio2 = sum2[0];           super_dfs(x + 1);           sum2[1] -= a[znac];           sum1[2] -= a[znac];           dio2 -= a[znac];           mask ^= znac;           break;         }         tem &= (tem - 1);       }       return;     }     if (x == 11) {       if (ok) return;       if (sum1[1] - sum1[2] != dio1 - sum2[3]) return;       tem = (1 << 16) - 1;       tem ^= mask;       while (tem > 0) {         znac = tem - (tem & (tem - 1));         if (a[znac] == dio1 - sum2[3]) {           mask |= znac;           p[2][3] = a[znac];           sum2[3] = dio1;           sum1[2] += a[znac];           super_dfs(13);           sum2[3] -= a[znac];           sum1[2] -= a[znac];           mask ^= znac;           break;         }         tem &= (tem - 1);       }       return;     }     if (x == 13) {       if (ok) return;       tem = (1 << 16) - 1;       tem ^= mask;       while (tem > 0) {         znac = tem - (tem & (tem - 1));         if (a[znac] == sum2[0] - sum2[1]) {           mask |= znac;           p[3][1] = a[znac];           sum2[1] = sum2[0];           sum1[3] += a[znac];           super_dfs(x + 1);           sum2[1] -= a[znac];           sum1[3] -= a[znac];           mask ^= znac;           break;         }         tem &= (tem - 1);       }       return;     }     if (x == 14) {       if (ok) return;       tem = (1 << 16) - 1;       tem ^= mask;       while (tem > 0) {         znac = tem - (tem & (tem - 1));         if (a[znac] == sum2[1] - sum2[2]) {           mask |= znac;           p[3][2] = a[znac];           sum2[2] = sum2[1];           sum1[3] += a[znac];           super_dfs(x + 1);           sum2[2] -= a[znac];           sum1[3] -= a[znac];           mask ^= znac;           break;         }         tem &= (tem - 1);       }       return;     }     tem = (1 << 16) - 1;     tem ^= mask;     while (tem > 0 && !ok) {       znac = tem - (tem & (tem - 1));       mask |= znac;       p[(x >> 2)][(x & 3)] = a[znac];       sum1[(x >> 2)] += a[znac];       sum2[(x & 3)] += a[znac];       if ((x >> 2) == (x & 3)) dio1 += a[znac];       if (x == 3 || x == 6 || x == 12) dio2 += a[znac];       super_dfs(x + 1);       if ((x >> 2) == (x & 3)) dio1 -= a[znac];       if (x == 3 || x == 6 || x == 12) dio2 -= a[znac];       sum1[(x >> 2)] -= a[znac];       sum2[(x & 3)] -= a[znac];       mask ^= znac;       tem &= (tem - 1);     }   }   int main() {     scanf( %d , &n);     int i;     int ss = 0;     for (i = 0; i < n * n; i++) {       scanf( %d , &a[(1 << i)]);       ss += a[(1 << i)];     }     if (n == 1) {       printf( %d n , a[1]);       printf( %d n , a[1]);       return 0;     }     if (n == 2) {       for (i = 0; i < n * n; i++) a[i] = a[(1 << i)];       dfs2(0);       return 0;     }     if (n == 3) {       for (i = 0; i < n * n; i++) a[i] = a[(1 << i)];       dfs(0);       return 0;     }     if (n == 4) {       sum = ss / n;       super_dfs(0);       return 0;     }     return 0;   }   