#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define mod 999911659
long long n;int p,a,ans;
long long dp[2][1010][1010],inv[1010],c[1010][1010],data[1010],cnt[1010];
long long C(long long x,int y)
{
if (y>x) return 0;
long long re=1;
for (long long i=x-y+1; i<=x; i++)
(re*=(i%mod))%=mod;
return re*inv[y]%mod;
}
void GetInv()
{
inv[0]=1,inv[1]=1;
for (int i=2; i<=9; i++)
inv[i]=(mod-mod/i)*inv[mod%i]%mod;
for (int i=2; i<=9; i++)
inv[i]=inv[i]*inv[i-1]%mod;
}
int main()
{
scanf("%lld%d",&n,&p);
GetInv();
int x=1%p,sz=0;
while (!cnt[x]) {cnt[x]=++sz; data[sz]=x; if (sz>=n) break; x=(x*10+1)%p;}
if (sz!=n)
{
long long N=n-cnt[x]+1; int SZ=sz-cnt[x]+1;
if (SZ>1) a=(p-data[cnt[x]+(N%SZ?N%SZ:SZ)-1])%p;
else a=(p-data[cnt[x]])%p;
for (int i=0,t=cnt[x]; i<p; i++)
if (cnt[i])
if (cnt[i]<t) cnt[i]=1;
else
if (SZ>1 && (N%SZ)>cnt[i]-t)
cnt[i]=N/SZ+1; else cnt[i]=N/SZ;
}
else
{
a=(p-x)%p;
for (int i=0; i<p; i++) if (cnt[i]) cnt[i]=1;
}
for (int i=0; i<p; i++)
for (int j=0; j<9; j++)
if (cnt[i]) c[i][j]=C(cnt[i]+j-1,j);
dp[0][0][0]=1;
int now=0;
for (int i=0; i<p; i++)
if (cnt[i])
{
now^=1;
for (int j=0; j<9; j++)
for (int k=0; k<p; k++)
dp[now][j][k]=dp[now^1][j][k];
for (int j=0; j<9; j++)
for (int k=0; k<p; k++)
if (dp[now^1][j][k])
for (int l=1; l<9-j; l++)
(dp[now][j+l][(k+l*i)%p]+=dp[now^1][j][k]*c[i][l]%mod)%=mod;
}
for (int i=0; i<9; i++)
ans=(ans+dp[now][i][a])%mod;
printf("%d\n",ans);
return 0;
}