#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define N 320000
#define mod 1000000007
char s[N];
int n, f[N][7];
void Add(int b, int &a){a = (a + b) % mod;}
int main()
{
	scanf("%s", s + 1);
	n = strlen(s + 1);
	f[0][0] = 1;
	for (int i = 1; i <= n; i++)
	{
		if (s[i] == '?' || s[i] == '0')
		{
			Add(f[i - 1][0], f[i][1]);
			Add(f[i - 1][1], f[i][2]);
			Add(f[i - 1][2], f[i][1]);
			Add(f[i - 1][3], f[i][4]);
			Add(f[i - 1][4], f[i][5]);
			Add(f[i - 1][5], f[i][4]);
			Add(f[i - 1][6], f[i][6]);
		}
		if (s[i] == '?' || s[i] == '1')
		{
			Add(f[i - 1][0], f[i][3]);
			Add(f[i - 1][1], f[i][0]);
			Add(f[i - 1][2], f[i][1]);
			Add(f[i - 1][3], f[i][6]);
			Add(f[i - 1][4], f[i][3]);
			Add(f[i - 1][5], f[i][4]);
			Add(f[i - 1][6], f[i][6]);
		}
	}
	printf("%d\n", (f[n][3] + f[n][6]) % mod);
}

