func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename T>   T nextInt() {     T x = 0, p = 1;     char ch;     do {       ch = getchar();     } while (ch <=    );     if (ch ==  - ) {       p = -1;       ch = getchar();     }     while (ch >=  0  && ch <=  9 ) {       x = x * 10 + (ch -  0 );       ch = getchar();     }     return x * p;   }   const int maxN = (int)5e2 + 10;   const int INF = (int)1e9;   const int mod = (int)1e9 + 7;   const long long LLINF = (long long)1e18;   long long a[maxN];   int n;   bool ok = false;   bool bad(int idx) {     for (int i = 0; i < idx; ++i) {       int r = 0;       for (int j = 0; j < n; ++j) {         if (((a[i] >> j) & 1) != ((a[idx] >> j) & 1)) {           r--;         } else {           r++;         }       }       if (r != 0) return true;     }     return false;   }   int cnt = 0;   void print() {     ok = 0;     for (int i = 0; i < 30; ++i) putchar( - );     putchar(  n );     char f[] = { * ,  + };     for (int i = 0; i < n; ++i) {       for (int j = 0; j < n; ++j) {         cout << f[(a[i] >> j) & 1];       }       cout <<   n ;     }     cout <<   n ;     for (int i = 0; i < n; ++i) {       for (int j = 0; j < n; ++j) {         cout << f[(a[i] >> j) & 1];         if (j == n / 2 - 1) putchar(   );       }       cout <<   n ;       if (i == n / 2 - 1) putchar(  n );     }     cout <<   n ;     for (int i = 0; i < 30; ++i) putchar( - );     putchar(  n );   }   void dfs(int idx, int n) {     if (idx == n) {       print();       return;     }     for (long long mask = 0; mask < (1LL << n) && ok; ++mask) {       a[idx] = mask;       if (bad(idx)) continue;       dfs(idx + 1, n);     }   }   char rev(char x) {     if (x ==  + ) return  * ;     return  + ;   }   vector<vector<char> > build(int k) {     vector<vector<char> > ret(1 << k, vector<char>(1 << k,  ? ));     if (k == 0) {       ret[0][0] =  * ;       return ret;     }     vector<vector<char> > prev = build(k - 1);     int prevsz = (1 << k) / 2;     for (int i = 0; i < prevsz; ++i) {       for (int j = 0; j < prevsz; ++j) {         ret[i][2 * j] = ret[i][2 * j + 1] = prev[i][j];       }     }     for (int j = prevsz - 1; j >= 0; --j) {       for (int i = 0; i < prevsz; ++i) {         ret[prevsz + i][2 * j + 1] = prev[i][j];         ret[prevsz + i][2 * j] = rev(prev[i][j]);       }     }     return ret;   }   int main() {     int k;     cin >> k;     vector<vector<char> > answer = build(k);     for (int i = 0; i < answer.size(); ++i) {       for (int j = 0; j < answer[i].size(); ++j) {         putchar(answer[i][j]);       }       putchar(  n );     }     return 0;   }   