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;

typedef long long ll;

const ll MOD = 1e9 + 7;
const int N = 1e4 + 5;

int n;
vector <int> num;
int d;
string s;
int dp[N][105][2];

ll go(int idx, int sum, bool limit) {
  if(idx == n) return sum == 0;
  if(dp[idx][sum][limit] !=  -1) return dp[idx][sum][limit];
  ll total = 0;
  int R = -1;
  if(limit == 0) R = num[idx];
  else R = 9;
  for(int p = 0; p <= R; p++) {
    bool nlimit = limit;
    if(limit == 0 and p < R) nlimit = 1;
    total = (total + go(idx + 1, (sum + p) % d, nlimit)) % MOD;
  }
  return dp[idx][sum][limit] = total;
}

int main() {
  memset(dp, -1, sizeof dp);
  cin >> s >> d;
  n = s.length();
  for(auto c : s) num.push_back(c - '0');
  //reverse(num.begin(), num.end());
  cout << (go(0, 0, 0) - 1 + MOD) % MOD << '\n';
}