void f(ll n,double*a,double*r){ convolution(a,n,r,n,r,n); rep(i,n){ r[i]=fmod(floor(r[i]+.5),1009); } } { ll@m++,@n++,@k[m]; double@a[n]; double z[n]{1}; ll a0=a[0]; ll a1=n>1?a[1]:0; ll aa=a[0]; if(true){ ll c=k[0]; while(c){ if(c&1){ f(n,a,z); } c>>=1; f(n,a,a); } } ll e=1; if(m>1&&n>1009){ e=2; ll c=k[1]; while(c){ if(c&1){ rep(i,1009,n){ z[i]=fmod(z[i]*a0+z[i-1009]*a1,1009); } rep(i,1009){ z[i]=fmod(z[i]*a0,1009); } } c>>=1; (a0,a1)=(a0*a0%1009,a0*a1*2%1009); } } ll b=m>e?powmod(aa,sum[i,e,m](k[i]),1009):1; wt((ll)z(n)*b%1009); }