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;
string S;
int memo[10005][105][2];
const int MOD=1e9+7;
int m;
int solve(int ix, int sisa, bool con)
{
	if(ix==S.size())
	{
		if(sisa%m==0) return 1;
		return 0;
	}
	if(memo[ix][sisa][con]!=-1) return memo[ix][sisa][con];
	int ret=0;
	if(!con)
	{
		for(int z=0;z<10;z++)
		{
			int tmp=(sisa+z)%m;
			ret+=solve(ix+1, tmp, con);
			ret%=MOD;
		}
	}
	else
	{
		int tr=S[ix]-'0';
		for(int z=0;z<=tr;z++)
		{
			int tmp=(sisa+z)%m;
			if(z==tr) ret+=solve(ix+1, tmp, 1);
			else ret+=solve(ix+1, tmp, 0);
			ret%=MOD;
		}
	}
	return memo[ix][sisa][con]=ret;
}

int main()
{
	cin>>S;
	cin>>m;
	memset(memo, -1, sizeof(memo));
	printf("%d\n", (solve(0, 0, 1)-1+MOD)%MOD);
	return 0;
}