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# (Mono 4.6.2.0) (judge verdict: Accepted)

using System;
using System.Linq;//リストの使用
using System.Collections.Generic;
using System.Text;//テキストの高速出力に必要
class Program
{
	static void Main()
	{
		string s = Console.ReadLine();
    int n = s.Length;
    int d = int.Parse(Console.ReadLine());
		long mod = 1000000007;
    long[,,] dp = new long[n+1,d,2];//見た桁、余り、他の数字を使用済みかどうか
    dp[0,0,0] = 1;

    for(int i = 1; i <= n; i++)
    {
      for(int j = 0; j < d; j++)
      {
        for(int k = 0; k <= 9; k++)
        {
          if(k == s[i-1]-'0')
          {
            dp[i,(j+k)%d,0] += dp[i-1,j,0];
            dp[i,(j+k)%d,0] %= mod;
          }else if(k < s[i-1]-'0')
          {
            dp[i,(j+k)%d,1] += dp[i-1,j,0];
            dp[i,(j+k)%d,1] %= mod;
          }

          dp[i,(j+k)%d,1] += dp[i-1,j,1];
          dp[i,(j+k)%d,1] %= mod;
        }
        //Console.WriteLine(i+" "+j+" "+dp[i,j,0]+" "+dp[i,j,1]);
      }
    }

    long answer = (dp[n,0,0]+dp[n,0,1]+mod-1)%mod;
		Console.WriteLine(answer);
	}
}