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: Accepted)

#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007

long long int dp[100001][101][2] = {0}, arr[100001] = {0};

long long int getsum(int index, int n, int flag, int sum, int k){
    if(index>n){
        if(sum==0) return 1;
        return 0;
    }

    if(dp[index][sum][flag]!=-1){
        return dp[index][sum][flag];
    }
    int limit = 0;
    if(flag) limit = arr[index];
    else limit = 9;
    long long int ans = 0;
    for(int i = 0; i <= limit; i++){
       if(i==limit && flag){
            ans = (ans+(getsum(index + 1, n, 1, (sum + i)%k, k)%mod))%mod;
       }
       else{
           ans = (ans+(getsum(index + 1, n, 0, (sum + i)%k, k)%mod))%mod;
       }
    }
    return dp[index][sum][flag] = ans;
}


int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    int k;
    string s;
    cin >> s >> k;
    
        memset(dp, -1, sizeof(dp));
        for(int i = 1; i <= s.size(); i++){
            arr[i] = s[i-1]-'0';
        }
        cout << (getsum(1, s.size(), 1, 0, k)-1+mod)%mod;
        
    return 0;
}