172.17.227.69
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cctype>
#include <algorithm>
#define rin(i,a,b) for(int i=(a);i<=(b);i++)
#define rec(i,a,b) for(int i=(a);i>=(b);i--)
#define trav(i,a) for(int i=head[(a)];i;i=e[i].nxt)
typedef long long LL;
using std::cin;
using std::cout;
using std::endl;
const int MAXN=100005;
int n,a[MAXN],f[MAXN][185],las[MAXN][10],maxa,maxans;
char s[MAXN];
int main(){
freopen("cost.in","r",stdin);
freopen("cost.out","w",stdout);
scanf("%s",s+1);
n=strlen(s+1);
rin(i,1,n){
a[i]=s[i]-'0';
maxa=std::max(maxa,a[i]);
rin(j,1,9){
if(j==a[i]) las[i][j]=i;
else las[i][j]=las[i-1][j];
}
}
maxans=maxa*((int)log2(n)+1);
rin(i,0,maxans) f[n+1][i]=n+1;
rec(i,n,1){
int j;
for(j=0;j<a[i];j++) f[i][j]=i;
for(j=a[i];;j++){
int temp=i;
rin(k,1,std::min(j,maxa)){
int nxt=las[f[i][j-k]][k];
if(nxt<i) continue;
temp=std::max(temp,f[nxt+1][j-k]);
}
f[i][j]=temp;
if(temp==n+1) break;
}
if(i==1){
printf("%d\n",j);
return 0;
}
for(;j<=maxans;j++) f[i][j]=n+1;
}
}
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cctype>
#include <algorithm>
#define rin(i,a,b) for(int i=(a);i<=(b);i++)
#define rec(i,a,b) for(int i=(a);i>=(b);i--)
#define trav(i,a) for(int i=head[(a)];i;i=e[i].nxt)
typedef long long LL;
using std::cin;
using std::cout;
using std::endl;
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
const int MAXN=10000005;
int n;
LL s,p,f[MAXN],g[MAXN];
int main(){
freopen("suffix.in","r",stdin);
freopen("suffix.out","w",stdout);
n=read(),s=read(),p=read();
g[1]=s;
rin(i,2,n){
f[i]=g[(i+1)>>1];
g[i]=((g[i-1]*s-f[i])%p+p)%p;
}
printf("%lld\n",g[n]);
return 0;
}