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++ (GCC 9.2.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>
#define int long long
#define maxn 10005
#define maxc 105
using namespace std;

const int mod = 1e9 + 7;

//     len   sum  last
int dp[maxn][maxc][10] = {};
string s;
int n, k;

int32_t main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> s >> k;
    reverse(begin(s), end(s));
    n = s.size(); s = "@" + s;
    for(int i = 0; i < 10; i++) {
        dp[1][i % k][i] = 1;
    }
    for(int len = 2; len <= n; len++) {
        for(int sum = 0; sum < k; sum++) {
            for(int last = 0; last < 10; last++) {
                int prev = (sum - last + k) % k;
                for(int i = 0; i < 10; i++)
                dp[len][sum][last] += dp[len - 1][prev][i];
                dp[len][sum][last] %= mod;
            }
        }
    }
    int ans = 0, cnt = 0;
    for(int i = n; i > 0; i--) {
        for(int j = 0; j < (s[i] - '0'); j++) {
            int prev = (k - cnt + k) % k;
            ans += dp[i][prev][j];
        }
        ans %= mod;
        cnt += s[i] - '0';
    }
    if(cnt % k == 0) ans++;
    ans = (ans - 1 + mod) % mod;
    cout << ans << '\n';
    return 0;
}