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: Time Limit Exceeded)

#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(ll i=0;i<(n);i++)
#define FOR(i,a,b) for(ll i=(a);i<(b);i++)
#define dfor(i,a,b) for(ll i=(a);i>=(b);i--)
#define mem(u, vis) memset(u, vis, sizeof(u))
#define ll long long
#define ull unsigned long long
#define MOD  1000000007
#define MAX  1e9
#define pb   push_back
#define F    first
#define S    second
string k;
ll d;
ll dp[10004][2][100];
// smaller ? 1 yes 0 no
ll calcdp(string s, ll pos, ll smaller, ll sum){
	if(pos >= s.length()){
		if(sum % d == 0){
			return 1;
		}
		return 0;
	}
	if(dp[pos][smaller][sum]!=-1){
		return dp[pos][smaller][sum];
	}
	ll index = 9, res = 0;
	if(!smaller){
		index = (s[pos] - '0');
	}
	for(ll i = 0; i <= index; ++i){
		ll ns;
		if(i<index) ns = 1;
		else ns = smaller;
		res = (res + calcdp(s, pos+1,ns,(sum + i)%d)%MOD)%MOD;
	}

	dp[pos][smaller][sum] = res;
	// cout<<res<<endl;
	return res;
}

signed main() {
	ll t=1;
	//cin>>t;
	while(t--){
		cin>>k>>d;
		mem(dp,-1);
		cout<<(calcdp(k,0,0,0)-1 + MOD)%MOD;

		
	}
	
}