#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
const int N = 1000010;
int DP[N][7];
char tmp[N];
void add(int &a, int b) { a = (a + b) % MOD; }
void calcDP(int i, char t) {
  if (t == '0' || t == '?') {
    add(DP[i][0], DP[i - 1][0]);
    add(DP[i][0], DP[i - 1][3]);
  }
  if (t == '1' || t == '?') {
    add(DP[i][3], DP[i - 1][1]);
    add(DP[i][4], DP[i - 1][0]);
    add(DP[i][4], DP[i - 1][3]);
  }
  if (t == '2' || t == '?') {
    add(DP[i][5], DP[i - 1][1]);
  }
  if (t == '*' || t == '?') {
    add(DP[i][1], DP[i - 1][4]);
    add(DP[i][1], DP[i - 1][5]);
    add(DP[i][1], DP[i - 1][1]);
    if (i == 1) DP[i][1] += 1;
  }
}
int main() {
  while (~scanf("%s", tmp)) {
    int n = strlen(tmp);
    memset(DP, 0, sizeof(DP));
    DP[0][0] = 1;
    for (int i = 0; i < n; i++) {
      calcDP(i + 1, tmp[i]);
    }
    int ans = 0;
    for (int i = 0; i < 6; i++)
      if (i != 4 && i != 5) add(ans, DP[n][i]);
    printf("%d\n", ans);
  }
}
