#include<bits/stdc++.h>
using namespace std;
using Int = long long;
//INSERT ABOVE HERE
const Int MOD = 1e9+7;
Int dp[3][3][314514];
void add(Int &a,Int b){a+=b;a%=MOD;};

signed main(){
  string s;
  cin>>s;
  Int n=s.size();
  
  memset(dp,0,sizeof(dp));
  dp[0][0][0]=1;
  for(Int i=0;i<n;i++){
    for(Int j=0;j<3;j++){
      for(Int k=0;k<3;k++){
	// cout<<i<<":"<<j<<" "<<k<<":"<<dp[j][k][i]<<endl;
	// s[i] == '0' || s[i] == '?'
	if(s[i]!='1') add(dp[j][(k%2)+1][i+1],dp[j][k][i]);
      }
      // s[i] == '1' || s[i] == '?'
      if(s[i]!='0'){
	Int k;
	k = 0; 
	add(dp[min(2LL,j+1)][0][i+1],dp[j][k][i]);
	k = 1;
	add(dp[j][0][i+1],dp[j][k][i]);	  
	k = 2;	
	add(dp[j][k-1][i+1],dp[j][k][i]);
      }
    }    
    // cout<<endl;
  }
  
  Int ans=dp[1][0][n];
  for(Int i=0;i<3;i++) add(ans,dp[2][i][n]);
  cout<<ans<<endl;
  return 0;
}
