1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 #include<algorithm>
6 #include<cmath>
7 using namespace std;
8 #define Maxn 10010*4
9 const double pi=acos(-1);
10 int Mod;
11
12 struct P
13 {
14 double x,y;
15 P() {x=y=0;}
16 P(double x,double y):x(x),y(y){}
17 friend P operator + (P x,P y) {return P(x.x+y.x,x.y+y.y);}
18 friend P operator - (P x,P y) {return P(x.x-y.x,x.y-y.y);}
19 friend P operator * (P x,P y) {return P(x.x*y.x-x.y*y.y,x.x*y.y+x.y*y.x);}
20 }a[Maxn],b[Maxn];
21
22 int R[Maxn],nn,m;
23 void dft(P *a,int f)
24 {
25 for(int i=0;i<nn;i++) if(i<R[i]) swap(a[i],a[R[i]]);
26 for(int i=1;i<nn;i<<=1)
27 {
28 P wn(cos(pi/i),f*sin(pi/i));
29 for(int j=0;j<nn;j+=i<<1)
30 {
31 P w(1,0);
32 for(int k=0;k<i;k++,w=w*wn)
33 {
34 P x=a[j+k],y=w*a[j+k+i];
35 a[j+k]=x+y;a[j+k+i]=x-y;
36 }
37 }
38 }
39 if(f==-1)
40 {
41 for(int i=0;i<=nn;i++) a[i].x/=nn,a[i].y/=nn;
42 }
43 }
44
45 int A[Maxn],B[Maxn],C[Maxn],nw[Maxn];
46 int aa,bb,cc;
47 void fft(int *A,int *B)
48 {
49 for(int i=0;i<nn;i++)
50 {
51 a[i].x=A[i];a[i].y=0;
52 b[i].x=B[i];b[i].y=0;
53 }
54 dft(a,1);dft(b,1);
55 for(int i=0;i<=nn;i++) a[i]=a[i]*b[i];
56 dft(a,-1);
57 for(int i=1;i<=m;i++) A[i]=((int)(a[i].x+0.5)%Mod);
58 }
59
60 void add(int *A,int *B)
61 {
62 for(int i=1;i<=m;i++) A[i]=(A[i]+B[i])%Mod;
63 }
64
65 void qpow(int k)
66 {
67 for(int i=0;i<=m;i++) A[i]=0;
68 for(int i=1;i<=m;i++) C[i]=B[i]=(aa*i*i+bb*i+cc)%Mod;
69 while(k)
70 {
71 if(k&1)
72 {
73 fft(A,B);
74 add(A,C);
75 }
76 for(int i=1;i<=m;i++) nw[i]=C[i];
77 fft(C,B);
78 add(C,nw);
79 fft(B,B);
80 k>>=1;
81 }
82 }
83
84 int main()
85 {
86 int n;
87 scanf("%d%d%d%d%d%d",&m,&Mod,&n,&aa,&bb,&cc);
88 if(n>m) n=m;
89 nn=1;int ll=0;
90 while(nn<=2*m) nn<<=1,ll++;
91 for(int i=0;i<=nn;i++) R[i]=(R[i>>1]>>1)|((i&1)<<(ll-1));
92 qpow(n);
93 printf("%d\n",A[m]);
94 return 0;
95 }