func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxN = 1005, maxD = 10, oo = 1e9;   int Len, dp[maxN][maxN];   int t[maxN][maxN], s[maxN], tool[maxN];   int n, perm[maxN], cost[maxD], cnt[maxN][maxD], lost[maxN];   bool flag = 0;   inline void solve(int i, int j, int d) {     int jp = 0, sum = 0;     for (int d2 = 0; d2 < maxD; d2++) {       int td = cnt[j][d2];       int fl = (d + 1 + d2) >= 10;       jp += fl * td;       sum += td * cost[(d + 1 + d2) % 10];       td = cnt[n][d2] - cnt[j][d2];       if (d2 == 0 && d == 0 && flag) td -= lost[n] - lost[j];       fl = (d + d2) >= 10;       jp += fl * td;       sum += td * cost[(d + d2) % 10];     }     dp[i + 1][jp] = max(dp[i + 1][jp], dp[i][j] + sum);     return;   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     string r;     cin >> r;     int sz = r.size();     for (int i = 0; i < sz; i++) {       if (r[i] ==  ? )         s[sz - i - 1] = -1;       else         s[sz - i - 1] = r[i] -  0 ;     }     Len = max(Len, sz);     cin >> n;     for (int i = 0; i < n; i++) {       string tmp;       cin >> tmp;       int cz = tmp.size();       for (int j = 0; j < cz; j++) t[i][cz - j - 1] = tmp[j] -  0 ;       Len = max(Len, cz);       tool[i] = cz;     }     for (int i = 0; i < maxD; i++) cin >> cost[i];     dp[0][0] = 0;     for (int j = 1; j <= n; j++) dp[0][j] = -oo;     for (int i = 1; i < maxN; i++)       for (int j = 0; j < maxN; j++) dp[i][j] = -oo;     for (int i = 0; i < n; i++) perm[i] = i;     for (int i = 0; i < Len; i++) {       for (int j = 1; j <= n; j++) {         for (int d = 0; d < maxD; d++) cnt[j][d] = cnt[j - 1][d];         int d = t[perm[j - 1]][i];         cnt[j][d]++;         lost[j] = lost[j - 1];         if (tool[perm[j - 1]] <= i) lost[j]++;       }       if (i >= sz) flag = true;       for (int j = 0; j <= n; j++) {         if (s[i] != -1)           solve(i, j, s[i]);         else {           int st = 0;           if (i == sz - 1) st = 1;           for (int d = st; d < maxD; d++) solve(i, j, d);         }       }       vector<int> vc;       for (int d = maxD - 1; d >= 0; d--)         for (int j = 0; j < n; j++)           if (t[perm[j]][i] == d) vc.push_back(perm[j]);       for (int j = 0; j < n; j++) perm[j] = vc[j];     }     int ans = 0;     for (int j = 0; j <= n; j++) ans = max(ans, dp[Len][j] + j * cost[1]);     cout << ans << endl;   }   