#include <cstdio>
#include <utility>
using namespace std;

using i64 = long long;

i64 D[13];
i64 E[13];
char S[100001];
const i64 M = 1000000007;
signed main() {
	D[0] = 1;
	scanf("%s", S);
	i64 i = 0;
	while(true) {
		char c = S[i];
		if (c == 0) {
			break;
		} else if (c == '?') {
			i64 s = D[0] + D[1] + D[2] + D[3] + D[4] + D[5] + D[6] + D[7] + D[8] + D[9] + D[10] + D[11] + D[12];
			E[0] = (s - D[4] - D[8] - D[12]) % M;
			E[1] = (s - D[3] - D[8] - D[12]) % M;
			E[2] = (s - D[3] - D[7] - D[12]) % M;
			E[3] = (s - D[3] - D[7] - D[11]) % M;
			E[4] = (s - D[2] - D[7] - D[11]) % M;
			E[5] = (s - D[2] - D[6] - D[11]) % M;
			E[6] = (s - D[2] - D[6] - D[10]) % M;
			E[7] = (s - D[1] - D[6] - D[10]) % M;
			E[8] = (s - D[1] - D[5] - D[10]) % M;
			E[9] = (s - D[1] - D[5] - D[9]) % M;
			E[10] = (s - D[0] - D[5] - D[9]) % M;
			E[11] = (s - D[0] - D[4] - D[9]) % M;
			E[12] = (s - D[0] - D[4] - D[8]) % M;
		} else {
			i64 d = c - '0';
			switch (d) {
			case 0:
				E[0] = D[0];
				E[1] = D[4];
				E[2] = D[8];
				E[3] = D[12];
				E[4] = D[3];
				E[5] = D[7];
				E[6] = D[11];
				E[7] = D[2];
				E[8] = D[6];
				E[9] = D[10];
				E[10] = D[1];
				E[11] = D[5];
				E[12] = D[9];
				break;
			case 1:
				E[0] = D[9];
				E[1] = D[0];
				E[2] = D[4];
				E[3] = D[8];
				E[4] = D[12];
				E[5] = D[3];
				E[6] = D[7];
				E[7] = D[11];
				E[8] = D[2];
				E[9] = D[6];
				E[10] = D[10];
				E[11] = D[1];
				E[12] = D[5];
				break;
			case 2:
				E[0] = D[5];
				E[1] = D[9];
				E[2] = D[0];
				E[3] = D[4];
				E[4] = D[8];
				E[5] = D[12];
				E[6] = D[3];
				E[7] = D[7];
				E[8] = D[11];
				E[9] = D[2];
				E[10] = D[6];
				E[11] = D[10];
				E[12] = D[1];
				break;
			case 3:
				E[0] = D[1];
				E[1] = D[5];
				E[2] = D[9];
				E[3] = D[0];
				E[4] = D[4];
				E[5] = D[8];
				E[6] = D[12];
				E[7] = D[3];
				E[8] = D[7];
				E[9] = D[11];
				E[10] = D[2];
				E[11] = D[6];
				E[12] = D[10];
				break;
			case 4:
				E[0] = D[10];
				E[1] = D[1];
				E[2] = D[5];
				E[3] = D[9];
				E[4] = D[0];
				E[5] = D[4];
				E[6] = D[8];
				E[7] = D[12];
				E[8] = D[3];
				E[9] = D[7];
				E[10] = D[11];
				E[11] = D[2];
				E[12] = D[6];
				break;
			case 5:
				E[0] = D[6];
				E[1] = D[10];
				E[2] = D[1];
				E[3] = D[5];
				E[4] = D[9];
				E[5] = D[0];
				E[6] = D[4];
				E[7] = D[8];
				E[8] = D[12];
				E[9] = D[3];
				E[10] = D[7];
				E[11] = D[11];
				E[12] = D[2];
				break;
			case 6:
				E[0] = D[2];
				E[1] = D[6];
				E[2] = D[10];
				E[3] = D[1];
				E[4] = D[5];
				E[5] = D[9];
				E[6] = D[0];
				E[7] = D[4];
				E[8] = D[8];
				E[9] = D[12];
				E[10] = D[3];
				E[11] = D[7];
				E[12] = D[11];
				break;
			case 7:
				E[0] = D[11];
				E[1] = D[2];
				E[2] = D[6];
				E[3] = D[10];
				E[4] = D[1];
				E[5] = D[5];
				E[6] = D[9];
				E[7] = D[0];
				E[8] = D[4];
				E[9] = D[8];
				E[10] = D[12];
				E[11] = D[3];
				E[12] = D[7];
				break;
			case 8:
				E[0] = D[7];
				E[1] = D[11];
				E[2] = D[2];
				E[3] = D[6];
				E[4] = D[10];
				E[5] = D[1];
				E[6] = D[5];
				E[7] = D[9];
				E[8] = D[0];
				E[9] = D[4];
				E[10] = D[8];
				E[11] = D[12];
				E[12] = D[3];
				break;
			case 9:
				E[0] = D[3];
				E[1] = D[7];
				E[2] = D[11];
				E[3] = D[2];
				E[4] = D[6];
				E[5] = D[10];
				E[6] = D[1];
				E[7] = D[5];
				E[8] = D[9];
				E[9] = D[0];
				E[10] = D[4];
				E[11] = D[8];
				E[12] = D[12];
				break;
			}
		}
		swap(D, E);
		++i;
	}
	printf("%d", D[5]);
}


Measured memory_bytes: 256