#include<bits/stdc++.h>
const int N=3e5+5,mod=1e9+7,ch[2][7]={{5,3,2,4,3,6,5},{1,2,2,1,3,0,5}};
int i,j,f[N][7];
char c[N];
inline void add(int&x,const int&y){
	x+=y-mod;
	x+=x>>31&mod;
}
int main(){
	scanf("%s",c+1);f[0][0]=1;
	for(i=1;c[i];++i)for(j=0;j<7;++j){
		if(c[i]!='0'){
			add(f[i][ch[1][j]],f[i-1][j]);	
		}
		if(c[i]!='1'){
			add(f[i][ch[0][j]],f[i-1][j]);
		}
	}
	printf("%d\n",(f[i-1][1]+f[i-1][2])%mod);
	return 0;
}