func_code_string: #include <bits/stdc++.h>   using namespace std;   inline int next_samebit(int mask) {     int lowbit = mask & -mask;     int slack = lowbit + mask;     return slack | (mask ^ slack) / lowbit / 4;   }   int n, a[16], ans[4][4], at, row[4], col[4], zig[3], tag[2];   const int mt[] = {1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1};   const int mr[] = {0, 0, 0, 0, 1, 2, 3, 2, 1, 1, 1, 3, 2, 2, 3, 3};   const int mc[] = {0, 1, 2, 3, 0, 0, 0, 1, 2, 1, 3, 1, 2, 3, 2, 3};   const int mv[] = {1, 0, 0, 2, 0, 0, 2, 2, 2, 1, 0, 0, 1, 0, 0, 1};   const int fr[] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1};   const int fc[] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1};   const int fv[] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1};   bool dfs(int i) {     if (i == 16) return true;     int r = mr[i], c = mc[i], v = mv[i];     for (int s = tag[mt[i]]; s; s &= s - 1) {       int x = __builtin_ctz(s);       ans[r][c] = a[x];       tag[mt[i]] ^= 1 << x, row[r] += a[x], col[c] += a[x], zig[v] += a[x];       if ((!fr[i] || row[r] == at) && (!fc[i] || col[c] == at) &&           (!fv[i] || zig[v] == at) && dfs(i + 1))         return true;       tag[mt[i]] ^= 1 << x, row[r] -= a[x], col[c] -= a[x], zig[v] -= a[x];     }     return false;   }   int main() {     scanf( %d , &n);     int m = n * n, all = 0, sum = 0;     for (int i = 0; i < m; all += a[i++]) scanf( %d , a + i);     if (n == 1) {       sum = a[0];     } else if (n == 2) {       sort(a, a + m);       do {         sum = a[0] + a[1];         if (sum == a[3] + a[4] && sum == a[0] + a[3] && sum == a[1] + a[4] &&             sum == a[0] + a[4] && sum == a[1] + a[3])           break;       } while (next_permutation(a, a + m));     } else if (n == 3) {       sort(a, a + m);       do {         sum = a[0] + a[1] + a[2];         if (sum == a[3] + a[4] + a[5] && sum == a[6] + a[7] + a[8] &&             sum == a[0] + a[3] + a[6] && sum == a[1] + a[4] + a[7] &&             sum == a[2] + a[5] + a[8] && sum == a[0] + a[4] + a[8] &&             sum == a[2] + a[4] + a[6])           break;       } while (next_permutation(a, a + m));     } else if (n == 4) {       int mask = (1 << m) - 1;       for (int s = 255; s <= mask; s = next_samebit(s)) {         for (int i = sum = 0; i < m; i++)           if (s & 1 << i) sum += a[i];         if ((all * 2 + sum) % 10) continue;         at = (all * 2 + sum) / 10;         tag[0] = mask ^ s;         tag[1] = s;         if (dfs(0)) break;       }       for (int i = 0; i < 4; i++)         for (int j = 0; j < 4; j++) a[i * n + j] = ans[i][j];       sum = a[0] + a[1] + a[2] + a[3];     }     printf( %d n , sum);     for (int i = 0; i < n; i++) {       for (int j = 0; j < n - 1; j++) printf( %d  , a[i * n + j]);       printf( %d n , a[i * n + n - 1]);     }   }   