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 Java8 (OpenJDK 1.8.0) (judge verdict: Wrong Answer)

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	static int d;
	static final int MOD=(int)1e9+7;
	public static void main(String[] args) {
		Scanner scan=new Scanner(System.in);
		String s=scan.next();
		d=scan.nextInt();
		dp=new long[s.length()][2][d];
		for(long[][] dd:dp) {
			for(long[] ddd:dd) Arrays.fill(ddd,-1);
		}
		System.out.println((go(0,0,0,s)-1)%MOD);
	}
	static long[][][] dp;
	public static long go(int at, int less, int rem, String s) {
		if(at==s.length()) {
			return rem==0?1:0;
		}
		if(dp[at][less][rem]!=-1) return dp[at][less][rem];
		long res=0L;
		int end=(less==1)?9:s.charAt(at)-'0';
		for(int i=0;i<=end;i++) {
			int nxtless=less;
			if(i<end) nxtless=1;
			res=(res+go(at+1,nxtless,(rem+i)%d,s)%MOD)%MOD;
		}
		return dp[at][less][rem]=res%MOD;
	}
}