#include using namespace std; #define ld long double #define ll long long #define int ll const ll mod = 1000000007; // int cntD(int n) { // if (n == 0) return 1; // int ans = 0; // while (n > 0) { // n /= 10; // ans++; // } // return ans; // } // bool pal(int n) { // int save = n; // int cur = 0; // while (n > 0) { // cur = 10*cur + (n % 10); // n /= 10; // } // return (save == cur); // } // int brute(int k, int p) { // int ans = 0; // for (int num = 0;; num++) { // if (cntD(num) > k) break; // if (num % p != 0) continue; // if (!pal(num)) continue; // ans++; // cout << num << " << " << endl; // } // return ans; // } /* */ ll k, p; ll dp[2010][2010]; ll extra[2010][2010]; int32_t main() { // ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); // freopen("in.txt", "r", stdin); cin >> k >> p; dp[0][0]++; for (int dig = 0; dig <= 9; dig++) { dp[1][dig % p]++; } extra[0][0]++; for (int dig = 0; dig <= 9; dig++) { extra[1][dig % p]++; } ll pwr = 1; for (int i = 2; i <= k; i++) { pwr *= 10; pwr %= p; for (int dig = 0; dig <= 9; dig++) { for (int rem = 0; rem < p; rem++) { ll nw_num = (((pwr*dig) % p) + ((rem*10) % p) + dig) % p; if (dig > 0) { dp[i][nw_num] += extra[i - 2][rem]; dp[i][nw_num] %= mod; } extra[i][nw_num] += extra[i - 2][rem]; extra[i][nw_num] %= mod; } } } int ans = 0; for (int len = 1; len <= k; len++) { ans += dp[len][0]; ans %= mod; } cout << ans << '\n'; return 0; }