typedef long long ll; const int LEN=3; void sarray_cpy(int a[][LEN],int b[][LEN],int n){ for(int i=0;i<n;i++){// a/b可以为同一个数组 for(int j=0;j<n;j++) b[i][j]=a[i][j]; } } void sarray_mul(int a[][LEN],int b[][LEN],int ret[][LEN],int n,int mod){ static int c[LEN][LEN];// a/b/ret可以为同一个数组 for(int i=0;i<n;i++) { for(int j=0;j<n;j++){ c[i][j]=0; for(int k=0;k<n;k++){ c[i][j]=(c[i][j]+1ll*a[i][k]*b[k][j])%mod; } } } sarray_cpy(c,ret,n); } void sarray_qpow(int aa[][LEN],ll b,int ret[][LEN],int n,int mod){ static int a[LEN][LEN];// aa ret可以为同一个数组 sarray_cpy(aa,a,n); for(int i=0;i<n;i++){ for(int j=0;j<n;j++) ret[i][j]=0; ret[i][i]=1; } while(b){ if(b&1) sarray_mul(ret,a,ret,n,mod); sarray_mul(a,a,a,n,mod); b>>=1; } } void sarray_add(int a[][LEN],int b[][LEN],int c[][LEN],int n,int mod){ for(int i=0;i<n;i++){// a,b,c可以为同一个数组 for(int j=0;j<n;j++){ c[i][j]=(a[i][j]+b[i][j])%mod; } } } // a^0 a^1 a^2 a^3 ... a^b void sarray_sum(int a[][LEN],ll b,int ret[][LEN],int n,int mod){ static int tmp[LEN][LEN]; if(b==0) sarray_qpow(a,b,ret,n,mod); else{ ll mid=(b-1)>>1; sarray_sum(a,mid,ret,n,mod); sarray_qpow(a,mid+1,tmp,n,mod); for(int i=0;i<n;i++) tmp[i][i]=(tmp[i][i]+1)%mod; sarray_mul(ret,tmp,ret,n,mod); if((b&1)==0) { sarray_mul(ret,a,ret,n,mod); for(int i=0;i<n;i++) ret[i][i]=(ret[i][i]+1)%mod; } } } int trans[LEN][LEN]={ 1,1,1, 1,0,0, 0,1,0 };
#include<bits/stdc++.h> using namespace std; void mul(const int a[2][2],const int b[2][2],int c[2][2],int mod){ int res[2][2]={}; for(int i=0;i<2;i++){ for(int j=0;j<2;j++){ for(int k=0;k<2;k++) res[i][j]=(res[i][j]+1ll*a[i][k]*b[k][j])%mod; } } memcpy(c,res,sizeof(res)); } void qpow(const int aa[2][2],int b,int c[2][2],int mod){ int a[2][2]; memcpy(a,aa,sizeof(a)); int res[2][2]={ 1,0, 0,1 }; while(b){ if(b&1) mul(res,a,res,mod);//res=1ll*res*a%mod; mul(a,a,a,mod);//a=1ll*a*a%mod; b>>=1; } memcpy(c,res,sizeof(res)); } void qpow(const int aa[2][2],char*b,int ed,int c[2][2],int mod){ int a[2][2]; memcpy(a,aa,sizeof(a)); int res[2][2]={ 1,0, 0,1 }; while(ed>=0){ int t[2][2]; qpow(a,b[ed]-'0',t,mod); mul(res,t,res,mod);//res=res*qpow(a,b[ed]-'0',mod); qpow(a,10,a,mod); ed--;// b/=10 } memcpy(c,res,sizeof(res)); } const int maxn=1e6+6; char s[maxn]; int main(){ int x0,x1,a,b,mod; scanf("%d%d%d%d%s%d",&x0,&x1,&a,&b,s,&mod); int trans[2][2]={ a,b, 1,0 }; int ans[2][2]={ x1,0, x0,0 }; int trans2[2][2]; qpow(trans,s,int(strlen(s))-1,trans2,mod); mul(trans2,ans,ans,mod); cout<<ans[1][0]<<endl; }