func_code_string: #include <bits/stdc++.h>   using namespace std;   int dp[2][1 << 16];   char art[7][1008];   int n;   int c[5];   vector<int> modi[1008];   void upd(int &x, int y) { x = min(x, y); }   int main() {     scanf( %d , &n);     for (int i = 1; i <= 4; i++) scanf( %d , &c[i]);     for (int i = 1; i <= 4; i++) scanf( %s , art[i] + 1);     int now = 0;     memset(dp[now], 0x3f, sizeof dp[now]);     dp[now][0] = 0;     for (int i = 1; i <= 4; i++) {       for (int j = 1; j <= 4 - i + 1; j++) {         int mas = (1 << 16) - 1;         for (int x = 0; x < i; x++)           for (int y = j - 1; y < j - 1 + i; y++) {             mas ^= (1 << (x * 4 + y));           }         modi[i].push_back(mas);       }     }     for (int i = 1; i <= n + 4; i++) {       now ^= 1;       memset(dp[now], 0x3f, sizeof dp[now]);       int nm = 0;       for (int j = 1; j <= 4; j++)         if (art[j][i] ==  * ) nm |= (1 << 11 + j);       for (int j = (1 << 16) - 1; j >= 0; j--)         if (dp[now ^ 1][j] < 1e9) {           for (int k = 1; k <= 4; k++)             for (int l = 0; l < modi[k].size(); l++)               upd(dp[now ^ 1][j & modi[k][l]], dp[now ^ 1][j] + c[k]);           if (j & 15) continue;           upd(dp[now][(j >> 4) | nm], dp[now ^ 1][j]);         }     }     printf( %d n , dp[now][0]);     return 0;   }   