Problem:
Score : 100 points

Problem Statement

Find the number of integers between 1 and K (inclusive) satisfying the following condition, modulo 10^9 + 7:

The sum of the digits in base ten is a multiple of D.

Constraints

All values in input are integers.

1 \leq K < 10^{10000}

1 \leq D \leq 100

Input

Input is given from Standard Input in the following format:

K
D

Output

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

Sample Input 1

30
4

Sample Output 1

6

Those six integers are: 4, 8, 13, 17, 22 and 26.

Sample Input 2

1000000009
1

Sample Output 2

2

Be sure to print the number modulo 10^9 + 7.

Sample Input 3

98765432109876543210
58

Sample Output 3

635270834

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

#include <bits/stdc++.h>
 
using namespace std;
 
#define fore(i, s, e) for(int i = s; i < e; i++)
#define pb push_back
#define fst first
#define snd second
 
typedef long long ll;
 
const int N = 2e4;
const int M = 1e9 + 7;
 
string s;
int n, d;
 
ll dp[20000][200][2];
 
 
ll calc(int i, int j, int k) {
    if(i == n && j == 0) return 1;
    if(i == n) return 0;
    ll &r = dp[i][j][k];
    if(r != -1) return r;
    ll times = 0;
    if(k) fore(dig, 0, s[i] - '0' + 1) {
        times += calc(i + 1, (j + dig) % d, (dig == (s[i] - '0')));
        times %= M;
    } else fore(dig, 0, 10) {
        times += calc(i + 1, (j + dig) % d, 0);
        times %= M;
    }
    return r = times % M;
}
 
int main() {
    s.resize(N);
    cin >> s;
    n = s.size();
    cin >> d;
    memset(dp, -1, sizeof dp);
    cout << (calc(0, 0, 1) - 1+M)%M << endl;
}