func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 5;   const int MAXM = 20;   int n, m;   int a[MAXN], b[MAXM];   int num[MAXM];   char ans[MAXN][MAXM];   set<int> states[MAXM];   int getState(int mask, int num[MAXM]) {     int res = mask;     for (int i = 0; i < n; ++i) {       res = res * MAXN + num[i];     }     return res;   }   bool dfs(int j, int lastState = 0) {     if (j == m) {       for (int i = 0; i < n; ++i) {         if (num[i] != a[i]) {           return false;         }       }       return true;     }     if (j) {       if (states[j].find(lastState) != states[j].end()) {         return false;       }       states[j].insert(lastState);     }     int origin[MAXM];     memcpy(origin, num, sizeof(num));     for (int k = 0; k < (1 << n); ++k) {       int cnt = 0;       for (int i = 0; i < n; ++i) {         if (k & (1 << i)) {           ans[i][j] =  * ;           if (i == 0 || ans[i - 1][j] ==  . ) {             ++cnt;           }         } else {           ans[i][j] =  . ;         }       }       if (cnt != b[j]) {         continue;       }       for (int i = 0; i < n; ++i) {         if (ans[i][j] ==  * ) {           if (j == 0 || ans[i][j - 1] ==  . ) {             ++num[i];           }         }       }       bool valid = true;       for (int i = 0; i < n; ++i) {         if (num[i] > a[i]) {           valid = false;           break;         }         if (ans[i][j] ==  * ) {           if (a[i] - num[i] > (m - j - 1) / 2) {             valid = false;             break;           }         } else {           if (a[i] - num[i] > (m - j) / 2) {             valid = false;             break;           }         }       }       if (valid) {         if (dfs(j + 1, getState(k, num))) {           return true;         }       }       memcpy(num, origin, sizeof(origin));     }     return false;   }   int main() {     while (cin >> n >> m) {       for (int i = 0; i < n; ++i) {         cin >> a[i];       }       for (int i = 0; i < m; ++i) {         cin >> b[i];       }       for (int i = 0; i < n; ++i) {         states[i].clear();       }       memset(num, 0, sizeof(num));       dfs(0);       for (int i = 0; i < n; ++i) {         for (int j = 0; j < m; ++j) {           cout << ans[i][j];         }         cout << endl;       }     }     return 0;   }   