额典型的矩阵快速幂
所以毒瘤在每一位都得改变矩阵的权
// luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
typedef int INT;
#define int long long
int n,mod;
struct Arr{
int a[4][4];
Arr(){
memset(a,0,sizeof(a));
}
friend Arr operator * (Arr A,Arr B){
Arr C;
for(int i=1;i<=3;i++){
for(int j=1;j<=3;j++){
for(int k=1;k<=3;k++){
C.a[i][j]=(C.a[i][j]+(A.a[i][k]%mod)*(B.a[k][j]%mod))%mod;
}
}
}
return C;
}
friend Arr operator ^ (Arr A,int k){
Arr ret;
for(int i=1;i<=3;i++)ret.a[i][i]=1;
while(k){
if(k%2==1){
ret=ret*A;
}
A=A*A;
k/=2;
}
return ret;
}
};
Arr tmp;
int now=1;
int last=0;
int tot=0;
INT main(){
cin>>n>>mod;
tmp.a[1][1]=1;
tmp.a[2][1]=1;
tmp.a[2][2]=1;
tmp.a[3][2]=1;
tmp.a[3][3]=1;
Arr B;
B.a[1][1]=last;
B.a[1][2]=tot+1;
B.a[1][3]=1;
while(tot<n){
now*=10;
tmp.a[1][1]*=10;
int pow=min(n-tot,now-now/10);
tot+=(pow);
Arr C=tmp^(pow);
B=B*C;
}
cout<<B.a[1][1];
}