func_code_string: #include <bits/stdc++.h>   using namespace std;   long long mod = 1000000007;   string s;   long long dp[1000001][7];   long long f(int idx, int la = 6) {     if (idx == s.size()) {       if (la == 2) return 0;       if (la == 1) return 0;       return 1;     }     if (dp[idx][la] != -1) return dp[idx][la];     long long res = 0;     if (s[idx] !=  ? ) {       char c = s[idx];       if (la == 0) {         if (c ==  0 )           res = f(idx + 1, 0);         else if (c ==  1 )           res = f(idx + 1, 1);       } else if (la == 1) {         if (c ==  * ) res = f(idx + 1, 4);       } else if (la == 2) {         if (c ==  * ) res = f(idx + 1, 4);       } else if (la == 3) {         if (c ==  0 )           res = f(idx + 1, 0);         else if (c ==  1 )           res = f(idx + 1, 1);       } else if (la == 4) {         if (c ==  2 )           res = f(idx + 1, 2);         else if (c ==  1 )           res = f(idx + 1, 3);         else if (c ==  * )           res = f(idx + 1, 4);       } else {         if (c ==  1 ) res = f(idx + 1, 1);         if (c ==  0 ) res = f(idx + 1, 0);         if (c ==  * ) res = f(idx + 1, 4);       }     } else if (la == 0) {       res += f(idx + 1, 0);       res %= mod;       res += f(idx + 1, 1);       res %= mod;     } else if (la == 1 || la == 2) {       res = f(idx + 1, 4);     } else if (la == 3) {       res += f(idx + 1, 0);       res %= mod;       res += f(idx + 1, 1);       res %= mod;     } else if (la == 4) {       res = f(idx + 1, 2);       res %= mod;       res += f(idx + 1, 3);       res %= mod;       res += f(idx + 1, 4);       res %= mod;     } else {       res += f(idx + 1, 0);       res %= mod;       res += f(idx + 1, 1);       res %= mod;       res += f(idx + 1, 4);       res %= mod;     }     return dp[idx][la] = res;   }   int main() {     memset(dp, -1, sizeof dp);     ios::sync_with_stdio(false);     cin >> s;     cout << f(0);   }   