#include #include #include #include //#include #include #include #include #include #include //#include #include #include #include //#include #include #include //#include #include #include #include #include #include const int dx[] = {1, 0, -1, 0}; const int dy[] = {0, 1, 0, -1}; using namespace std; typedef long long ll; typedef unsigned long long ull; typedef vector vi; typedef vector vll; typedef pair pii; const int MOD = 1e9+7; ll dp[2][20200]; int main() { cin.tie(0); ios::sync_with_stdio(false); string S; cin >> S; int M; cin >> M; int n = S.size(), cnt = 0; for (int i = 0; i < n; i++) if (S[i]=='0') cnt++; for (int i = 0; i < n; i++) { int cur = i%2, tar = cur^1; memset(dp[tar], 0, sizeof(dp[tar])); int num = S[i] - '0'; if (num != 0) { (dp[tar][num%M] += 1) %= MOD; } for (int m = 0; m < M; m++) { (dp[tar][m] += dp[cur][m]) %= MOD; int nm = (m*10+num)%M; (dp[tar][nm] += dp[cur][m]) %= MOD; } } cout << (dp[n%2][0]+cnt)%MOD << endl; return 0; }