func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MOD = 1e9 + 7;   int N;   char c[2000000];   int numWays() {     if (N == 1) {       if (c[0] ==  * )         return 1;       else if (c[0] ==  0 )         return 1;       else if (c[0] ==  ? )         return 2;       else         return 0;     }     if (c[0] ==  2 ) return 0;     if (c[N - 1] ==  2 ) return 0;     for (int i = 0; i < N; i++) {       if (c[i] ==  0 ) {         if (i > 0) {           if (c[i - 1] ==  ? )             c[i - 1] =  - ;           else if (c[i - 1] ==  * )             return 0;         }         if (i + 1 < N) {           if (c[i + 1] ==  ? )             c[i + 1] =  - ;           else if (c[i + 1] ==  * )             return 0;         }       }     }     for (int i = 0; i < N; i++) {       int max = (i > 0) + ((i + 1) < N);       if (c[i] ==  0  + max) {         if (i > 0) {           if (c[i - 1] ==  ? )             c[i - 1] =  * ;           else if (c[i - 1] !=  * )             return 0;         }         if (i + 1 < N) {           if (c[i + 1] ==  ? )             c[i + 1] =  * ;           else if (c[i + 1] !=  * )             return 0;         }       }     }     for (int i = 1; i + 1 < N; i++) {       if (c[i] ==  1 ) {         int numq = (c[i - 1] ==  ? ) + (c[i + 1] ==  ? );         int numm = (c[i - 1] ==  * ) + (c[i + 1] ==  * );         int numf = 2 - numm - numq;         if (numq == 0) {           if (numf != 1) return 0;         } else if (numq == 1) {           if (numm == 0) {             if (c[i - 1] ==  ? )               c[i - 1] =  * ;             else if (c[i + 1] ==  ? )               c[i + 1] =  * ;             else               assert(false);           } else if (numm == 1) {             if (c[i - 1] ==  ? )               c[i - 1] =  - ;             else if (c[i + 1] ==  ? )               c[i + 1] =  - ;             else               assert(false);           } else             assert(false);         }       }     }     for (int i = N - 2; i > 0; i--) {       if (c[i] ==  1 ) {         int numq = (c[i - 1] ==  ? ) + (c[i + 1] ==  ? );         int numm = (c[i - 1] ==  * ) + (c[i + 1] ==  * );         int numf = 2 - numm - numq;         if (numq == 0) {           if (numf != 1) return 0;         } else if (numq == 1) {           if (numm == 0) {             if (c[i - 1] ==  ? )               c[i - 1] =  * ;             else if (c[i + 1] ==  ? )               c[i + 1] =  * ;             else               assert(false);           } else if (numm == 1) {             if (c[i - 1] ==  ? )               c[i - 1] =  - ;             else if (c[i + 1] ==  ? )               c[i + 1] =  - ;             else               assert(false);           } else             assert(false);         }       }     }     int res = 1;     for (int i = 0; i < N; i++) {       if (c[i] ==  ?  && (i == 0 || c[i - 1] !=  1 )) {         res *= 2;         if (res >= MOD) res -= MOD;       }     }     return res;   }   int main() {     cin >> c;     N = strlen(c);     cout << numWays() <<   n ;   }   