/* -*- coding: utf-8 -*- * * 372.cc: No.372 It's automatic - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int MAX_N = 10000; const int MAX_M = 20000; typedef long long ll; const ll MOD = 1000000007; /* typedef */ /* global variables */ ll dp[2][MAX_M + 1], dp0[2][MAX_M + 1]; /* subroutines */ /* main */ int main() { string s; int m; cin >> s >> m; int n = s.size(); dp[0][0] = 1; int cur = 0, nxt = 1, zn = 0; for (int i = 0; i < n; i++) { int di = s[i] - '0'; memcpy(dp[nxt], dp[cur], sizeof(dp[cur])); memcpy(dp0[nxt], dp0[cur], sizeof(dp0[cur])); if (di == 0) dp0[nxt][0] = (dp0[nxt][0] + 1) % MOD, zn++; for (int j = 0; j < m; j++) { if (dp[cur][j] > 0) { int j1 = (j * 10 + di) % m; dp[nxt][j1] = (dp[nxt][j1] + dp[cur][j]) % MOD; } if (dp0[cur][j] > 0) { int j1 = (j * 10 + di) % m; dp0[nxt][j1] = (dp0[nxt][j1] + dp0[cur][j]) % MOD; } } cur ^= 1, nxt ^= 1; } printf("%lld\n", (dp[cur][0] + MOD - 1 + MOD - (dp0[cur][0] - zn)) % MOD); //printf("dp0=%lld,zn=%d\n", dp0[cur][0] % MOD, zn); return 0; }