Problem:
Score : 400 points

Problem Statement

Given is a string S. Each character in S is either a digit (0, ..., 9) or ?.

Among the integers obtained by replacing each occurrence of ? with a digit, how many have a remainder of 5 when divided by 13? An integer may begin with 0.

Since the answer can be enormous, print the count modulo 10^9+7.

Constraints

S is a string consisting of digits (0, ..., 9) and ?.

1 \leq |S| \leq 10^5

Input

Input is given from Standard Input in the following format:

S

Output

Print the number of integers satisfying the condition, modulo 10^9+7.

Sample Input 1

??2??5

Sample Output 1

768

For example, 482305, 002865, and 972665 satisfy the condition.

Sample Input 2

?44

Sample Output 2

1

Only 044 satisfies the condition.

Sample Input 3

7?4

Sample Output 3

0

We may not be able to produce an integer satisfying the condition.

Sample Input 4

?6?42???8??2??06243????9??3???7258??5??7???????774????4?1??17???9?5?70???76???

Sample Output 4

153716888

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <bits/stdc++.h>
using namespace std;
#define ll          long long int
#define speed_up    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define mod         1000000007
#define F           first
#define S           second
#define ld          long double
#define rep(i,a,b)  for(ll i=a;i<b;i++)
 
void solve()
{
      string s; cin>>s;
      ll n=s.size();
      ll dp[n+1][13];
      memset(dp,0,sizeof dp);
      dp[0][0]=1;
      // dp[i][j] - till index i cnt of no. with modulo = j
      for(ll i=1; i<=n; i++)
      {
            if(s[i-1]=='?')
            {
                  // can put any value here from zero to 9
                  for(ll c=0; c<10; c++)
                  {
                        for(ll m=0; m<13; m++)
                        {
                              ll cur=(10*m + c) % 13;
                              dp[i][cur] = (dp[i][cur] + dp[i-1][m]) % mod;
                        }
                  }
            }
            else
            {
                  ll c=s[i-1]-'0';
                  for(ll m=0; m<13; m++)
                  {
                        ll cur=(10*m + c) % 13;
                        dp[i][cur] = (dp[i][cur] + dp[i-1][m]) % mod;
                  }
            }
      }
      ll ans = dp[n][5];
      cout<<ans<<endl;
}

int main() {
	ll T = 1;
	speed_up
	//cin>>T;
	while(T--)
	    solve();
	return 0;
}