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 (GCC 5.4.1) (judge verdict: Accepted)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define df 0
#define MOD 1000000007
void clear(int i);
void plus_i(char s);
void plus(int i);
void times10();

int ans[0][13]={};
int main(){
  char s[100010];
  scanf("%s",s);
  int i,len=strlen(s);
  ans[1][0]=1;
  for(i=0;i<len;i++){
    clear(0);
    plus_i(s[i]);
    if(df){
      int k;
      printf("[ ");
      for(k=0;k<13;k++){
	printf("%d ",ans[0][k]);
      }
      printf("]\n");
    }
    clear(1);
    times10();
    if(df){
      int k;
      printf("[ ");
      for(k=0;k<13;k++){
	printf("%d ",ans[1][k]);
      }
      printf("]\n");
    }
  }

  printf("%d",ans[0][5]);
  return 0;
}
void clear(int i){
  int k;
  for(k=0;k<13;k++)
    ans[i][k]=0;
}


void plus_i(char s){
  if(s=='?'){
    int i;
    for(i=0;i<10;i++){
      plus(i);
    }

  }
  else{
    int i=s-'0';
    plus(i);
  }
}

void plus(int i){
  int a;
  for(a=0;a<13;a++){
    ans[0][(a+i)%13]+=ans[1][a];
    ans[0][(a+i)%13]%=MOD;
  }
}

void times10(){
  int k;
  for(k=0;k<13;k++){
    ans[1][10*k%13]=ans[0][k]%MOD;
  }
}


/// confirm df==0 ///