func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m;   int cntrow[21];   int cntcol[6];   vector<int> sol;   vector<int> allmasks[6];   bool DP[20][11][11][11][11][11][(1 << 5) + 1];   bool solve(int row, int c1, int c2, int c3, int c4, int c5, int mask) {     if (row == m) {       int tmp = c1 + c2 + c3 + c4 + c5;       if (tmp == 0) return true;       return false;     }     bool &temp = DP[row][c1][c2][c3][c4][c5][mask];     if (temp) return false;     temp = true;     for (int i = 0; i < allmasks[cntrow[row]].size(); i++) {       int tmp = allmasks[cntrow[row]][i];       int nc1 = c1;       int nc2 = c2;       int nc3 = c3;       int nc4 = c4;       int nc5 = c5;       if ((mask & (1 << 0)) == 0 && (tmp & (1 << 0)) != 0) nc1--;       if ((mask & (1 << 1)) == 0 && (tmp & (1 << 1)) != 0) nc2--;       if ((mask & (1 << 2)) == 0 && (tmp & (1 << 2)) != 0) nc3--;       if ((mask & (1 << 3)) == 0 && (tmp & (1 << 3)) != 0) nc4--;       if ((mask & (1 << 4)) == 0 && (tmp & (1 << 4)) != 0) nc5--;       if (nc1 < 0 || nc2 < 0 || nc3 < 0 || nc4 < 0 || nc5 < 0) continue;       if (solve(row + 1, nc1, nc2, nc3, nc4, nc5, tmp)) {         sol.push_back(tmp);         return true;       }     }     return false;   }   int main() {     ios_base::sync_with_stdio(0);     cin >> n >> m;     for (int i = 0; i < n; i++) cin >> cntcol[i];     for (int i = 0; i < m; i++) cin >> cntrow[i];     for (int i = 0; i < (1 << n); i++) {       int cnt = 0;       for (int j = 0; j < n; j++) {         if (j == 0 || ((i & (1 << (j - 1))) == 0))           if ((i & (1 << j)) != 0) cnt++;       }       allmasks[cnt].push_back(i);     }     solve(0, cntcol[0], cntcol[1], cntcol[2], cntcol[3], cntcol[4], 0);     reverse(sol.begin(), sol.end());     for (int j = 0; j < n; j++) {       for (int i = 0; i < sol.size(); i++) {         if (sol[i] & (1 << j))           cout <<  * ;         else           cout <<  . ;       }       cout <<   n ;     }     return 0;   }   