#include<bits/stdc++.h>
using namespace std;

long long f[2][3][2][3];//状态，位置，0个数 
const long long mod=1e9+7;
int n;
char s[1000010];

int main(){
	int op=0;
	f[0][0][1][0]=1;
	scanf("%s",s+1);
	n=strlen(s+1);s[n+1]='1';
	for(int i=1;i<=n+1;i++){
		op^=1;memset(f[op],0,sizeof(f[op]));
		if(s[i]!='0'){
			f[op][0][1][0]+=f[op^1][0][0][0]+f[op^1][0][0][2]+f[op^1][0][1][1];
			f[op][0][0][0]+=f[op^1][0][0][1]+f[op^1][0][1][2];
			f[op][1][1][0]+=f[op^1][1][0][2]+f[op^1][1][1][1];
			f[op][1][0][0]+=f[op^1][0][1][0]+f[op^1][1][1][0]+f[op^1][1][1][2]+f[op^1][1][0][1];
			f[op][2][1][0]+=f[op^1][1][0][0]+f[op^1][2][0][2]+f[op^1][2][1][1]+f[op^1][2][0][0];
			f[op][2][0][0]+=f[op^1][2][1][2]+f[op^1][2][1][0]+f[op^1][2][0][1];
		}
		if(s[i]!='1'){
			for(int j=0;j<3;j++)
				for(int k=0;k<2;k++)
					f[op][j][k][2]+=f[op^1][j][k][1],f[op][j][k][1]+=f[op^1][j][k][2]+f[op^1][j][k][0];
		}
		for(int j=0;j<3;j++)
			for(int k=0;k<2;k++)
				for(int q=0;q<3;q++) f[op][j][k][q]%=mod;
	}
	printf("%lld",(f[op][2][0][0]+f[op][2][1][0])%mod);
}