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 <algorithm>
#include <climits>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <vector>

#define int long long int
constexpr int MOD = 1000000000 + 7; // 10 ** 9 + 7
using namespace std;

int dp[100000 + 2][13];

void add(int i, int n) {
  n %= 13;
  for (int p = 0; p < 13; p++) {
    int idx = (p + n) % 13;
    dp[i + 1][idx] += dp[i][p];
    dp[i + 1][idx] %= MOD;
  }
}

void solve() {
  string s;
  cin >> s;

  reverse(s.begin(), s.end());

  dp[0][0] = 1;

  int base = 1;
  for (int i = 0; i < s.size(); i++) {
    char c = s[i];
    if (c == '?') {
      for (int n = 0; n < 10; n++) {
        add(i, base * n);
      }
    } else {
      add(i, base * (c - '0'));
    }
    base = (base * 10) % 13;
  }

  cout << dp[s.size()][5] << endl;
}

signed main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  solve();
  return 0;
}