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

using i64 = long long;

char S[100001];
const i64 M = 1000000007;
signed main() {
	i64 D0 = 1, D1 = 0, D2 = 0, D3 = 0, D4 = 0, D5 = 0, D6 = 0, D7 = 0, D8 = 0, D9 = 0, D10 = 0, D11 = 0, D12 = 0;
	i64 E0 = 0, E1 = 0, E2 = 0, E3 = 0, E4 = 0, E5 = 0, E6 = 0, E7 = 0, E8 = 0, E9 = 0, E10 = 0, E11 = 0, E12 = 0;
	scanf("%s", S);
	i64 i = 0;
	while(true) {
		char c = S[i];
		if (c == 0) {
			break;
		} else if (c == '?') {
			i64 s = D0 + D1 + D2 + D3 + D4 + D5 + D6 + D7 + D8 + D9 + D10 + D11 + D12;
			E0 = (s - D4 - D8 - D12) % M;
			E1 = (s - D3 - D8 - D12) % M;
			E2 = (s - D3 - D7 - D12) % M;
			E3 = (s - D3 - D7 - D11) % M;
			E4 = (s - D2 - D7 - D11) % M;
			E5 = (s - D2 - D6 - D11) % M;
			E6 = (s - D2 - D6 - D10) % M;
			E7 = (s - D1 - D6 - D10) % M;
			E8 = (s - D1 - D5 - D10) % M;
			E9 = (s - D1 - D5 - D9) % M;
			E10 = (s - D0 - D5 - D9) % M;
			E11 = (s - D0 - D4 - D9) % M;
			E12 = (s - D0 - D4 - D8) % M;
		} else {
			i64 d = c - '0';
			switch (d) {
			case 0:
				E0 = D0;
				E1 = D4;
				E2 = D8;
				E3 = D12;
				E4 = D3;
				E5 = D7;
				E6 = D11;
				E7 = D2;
				E8 = D6;
				E9 = D10;
				E10 = D1;
				E11 = D5;
				E12 = D9;
				break;
			case 1:
				E0 = D9;
				E1 = D0;
				E2 = D4;
				E3 = D8;
				E4 = D12;
				E5 = D3;
				E6 = D7;
				E7 = D11;
				E8 = D2;
				E9 = D6;
				E10 = D10;
				E11 = D1;
				E12 = D5;
				break;
			case 2:
				E0 = D5;
				E1 = D9;
				E2 = D0;
				E3 = D4;
				E4 = D8;
				E5 = D12;
				E6 = D3;
				E7 = D7;
				E8 = D11;
				E9 = D2;
				E10 = D6;
				E11 = D10;
				E12 = D1;
				break;
			case 3:
				E0 = D1;
				E1 = D5;
				E2 = D9;
				E3 = D0;
				E4 = D4;
				E5 = D8;
				E6 = D12;
				E7 = D3;
				E8 = D7;
				E9 = D11;
				E10 = D2;
				E11 = D6;
				E12 = D10;
				break;
			case 4:
				E0 = D10;
				E1 = D1;
				E2 = D5;
				E3 = D9;
				E4 = D0;
				E5 = D4;
				E6 = D8;
				E7 = D12;
				E8 = D3;
				E9 = D7;
				E10 = D11;
				E11 = D2;
				E12 = D6;
				break;
			case 5:
				E0 = D6;
				E1 = D10;
				E2 = D1;
				E3 = D5;
				E4 = D9;
				E5 = D0;
				E6 = D4;
				E7 = D8;
				E8 = D12;
				E9 = D3;
				E10 = D7;
				E11 = D11;
				E12 = D2;
				break;
			case 6:
				E0 = D2;
				E1 = D6;
				E2 = D10;
				E3 = D1;
				E4 = D5;
				E5 = D9;
				E6 = D0;
				E7 = D4;
				E8 = D8;
				E9 = D12;
				E10 = D3;
				E11 = D7;
				E12 = D11;
				break;
			case 7:
				E0 = D11;
				E1 = D2;
				E2 = D6;
				E3 = D10;
				E4 = D1;
				E5 = D5;
				E6 = D9;
				E7 = D0;
				E8 = D4;
				E9 = D8;
				E10 = D12;
				E11 = D3;
				E12 = D7;
				break;
			case 8:
				E0 = D7;
				E1 = D11;
				E2 = D2;
				E3 = D6;
				E4 = D10;
				E5 = D1;
				E6 = D5;
				E7 = D9;
				E8 = D0;
				E9 = D4;
				E10 = D8;
				E11 = D12;
				E12 = D3;
				break;
			case 9:
				E0 = D3;
				E1 = D7;
				E2 = D11;
				E3 = D2;
				E4 = D6;
				E5 = D10;
				E6 = D1;
				E7 = D5;
				E8 = D9;
				E9 = D0;
				E10 = D4;
				E11 = D8;
				E12 = D12;
				break;
			}
		}
		D0 = E0;
		D1 = E1;
		D2 = E2;
		D3 = E3;
		D4 = E4;
		D5 = E5;
		D6 = E6;
		D7 = E7;
		D8 = E8;
		D9 = E9;
		D10 = E10;
		D11 = E11;
		D12 = E12;
		++i;
	}
	printf("%d", D5);
}


Measured memory_bytes: 256