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 <iostream>
#include <string>
#include <algorithm>

using namespace std;
using ll = long long;

const ll MOD = 1000000007;

int main() {
    string k;
    int d;
    cin >> k >> d;
    reverse(k.begin(), k.end());

    int n = k.length();
    ll dp[n + 1][d][2];
    fill(dp[0][0], dp[n + 1][0], 0);
    dp[0][0][0] = dp[0][0][1] = 1;

    for (int m = 1; m <= n; ++m) {
        for (int i = 0; i < 10; ++i) {
            for (int j = 0; j < d; ++j) {
                dp[m][(i + j) % d][0] += dp[m - 1][j][0];
                dp[m][(i + j) % d][0] %= MOD;
            }
        }

        int p = k[m - 1] - '0';
        for (int i = 0; i < p; ++i) {
            for (int j = 0; j < d; ++j) {
                dp[m][(i + j) % d][1] += dp[m - 1][j][0];
                dp[m][(i + j) % d][1] %= MOD;
            }
        }

        for (int j = 0; j < d; ++j) {
            dp[m][(p + j) % d][1] += dp[m - 1][j][1];
            dp[m][(p + j) % d][1] %= MOD;
        }
    }

    cout << (dp[n][0][1] + MOD - 1) % MOD << endl;
}