#include #include #include using namespace std; string s; int M; const int MAX_M = 20000; const int MOD = 1000000007; int dp[2][2][MAX_M]; #define ADD_MOD(x,s) x += (s); \ if(x >= MOD) x-= MOD; int main() { cin >> s >> M; dp[0][0][0] = 1; for(size_t cur = 0; cur < s.size(); cur++) { for(int zero = 0; zero < 2; zero++) { for(int i = 0; i < M; i++) { // 使わない ADD_MOD(dp[(cur + 1) & 1][zero][i], dp[(cur) & 1][zero][i]); // 使う if(s[cur] == '0' && zero == 0) continue; // 最初はゼロは禁止 else { ADD_MOD(dp[(cur + 1) & 1][1][(i * 10 + s[cur] - '0') % M], dp[(cur) & 1][zero][i]); } } } memset(dp[cur & 1], 0, sizeof(dp[0])); } ADD_MOD(dp[s.size() & 1][1][0], count(s.begin(), s.end(), '0')); cout << dp[s.size() & 1][1][0] << endl; }