#include <bits/stdc++.h>

using namespace std;

const int MOD = 1e9 + 7;

void add(int &x, int y) {
   x += y;
   if (x >= MOD) x -= MOD;
}

int main() {
   ios_base::sync_with_stdio(false); cin.tie(nullptr);
   string S;
   cin >> S;
   array<array<int, 3>, 3> dp = {};
   dp[0][0] = 1;
   int ans = 0;
   for (char c : S) {
      array<array<int, 3>, 3> ndp = {};
      if (c == '?') add(ans, ans);
      if (c != '0') {
         for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
               if (j) add(ndp[i][j - 1], dp[i][j]);
               else if (i == 2) add(ans, dp[i][j]);
               else add(ndp[i + 1][j], dp[i][j]);
            }
         }
      }
      if (c != '1') {
         for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
               int nj = j + 1;
               if (nj == 3) nj = 1;
               add(ndp[i][nj], dp[i][j]);
            }
         }
      }
      dp = ndp;
   }
   add(ans, dp[2][1]);
   add(ans, dp[1][0]);
   cout << ans << "\n";
   return 0;
}
