#include<stdio.h>
#include<iostream>
#include<cstring>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#include<algorithm>
#define ll long long
#define maxn 300005
#define p 1000000007
using namespace std;
char s[maxn];
int dp[maxn][5][5];

int main()
{
	scanf("%s",s+1);
	int len=strlen(s+1);
	dp[0][0][0]=1;
	for(register int i=0;i<len;++i)
	{
		if(s[i+1]!='1')
		{
			for(int j=0;j<3;++j)
				for(int k=0;k<3;++k)
				{
					if(k==2)
						dp[i+1][j][k-1]=(dp[i+1][j][k-1]+dp[i][j][k])%p;
					else
						dp[i+1][j][k+1]=(dp[i+1][j][k+1]+dp[i][j][k])%p;
				}
					
		}
		if(s[i+1]!='0')
		{
			for(int j=0;j<3;++j)
				for(int k=0;k<3;++k)
				{
					if(k==0)
						dp[i+1][j+(j!=2)][k]=(dp[i+1][j+(j!=2)][k]+dp[i][j][k])%p;
					else
						dp[i+1][j][k-1]=(dp[i+1][j][k-1]+dp[i][j][k])%p;
				}
		}
	}
	int ans=0;
	for(register int i=0;i<3;++i)
		for(register int j=0;j<=i;++j)
			ans=(ans+dp[len][i][j])%p;
	printf("%d\n",ans);
	return 0;
}
