#include #define MOD 1000000007L #define S_MAX 10000 #define M_MAX 20000 char S[S_MAX + 1]; long long int mods[M_MAX + 1]; long long int next[M_MAX + 1]; int main(int argc, char* argv[]){ long long int M = 0; std::scanf("%s", S); std::scanf("%d", &M); long long int zero_count = 0; mods[0] = 1; for(int pos = 0; S[pos] != '\0'; pos++){ const int cur_num = S[pos] - '0'; for(int i = 0; i <= M; i++){ next[i] = 0; } if(cur_num == 0){ zero_count++; } for(long long int mod = (cur_num != 0 ? 0 : 1); mod <= M; mod++){ if(mods[mod] == 0){ continue; } const long long int next_mod = (mod * 10 + cur_num) % M; if(next_mod != 0){ next[next_mod] += mods[mod]; next[next_mod] %= MOD; }else{ next[M] += mods[mod]; next[M] %= MOD; } } for(int i = 0; i <= M; i++){ mods[i] += next[i]; mods[i] %= MOD; } } std::printf("%lld\n", (mods[M] + zero_count) % MOD); return 0; }