#include #include #include using namespace std; typedef valarray<__int128_t>V; //lol int _N,MOD=1000000007; V z; V &Me(const V &_x,const V &_y){ int i=0,j; for(;i<_N;i++)for(j=0;j<_N;j++)z[i*_N+j]=(_x[slice(i*_N,_N,1)]*_y[slice(j,_N,_N)]).sum()%MOD; return z; } V &Mx(const V &_x){ int i=0,j; for(;i<_N;i++)for(j=0;j<_N;j++)z[i*_N+j]=(_x[slice(i*_N,_N,1)]*_x[slice(j,_N,_N)]).sum()%MOD; return z; } int main(){ int N,i; long long K; scanf("%d%lld",&N,&K); vectorA(N); for(i=0;i>=1){ if(K&1)e=Me(e,x); x=Mx(x); } long long f=0,s=accum*x[0]; for(i=1;i<=N;i++)f=(f+e[_N+i]*A[N-i])%MOD,s=(s+e[i]*A[N-i])%MOD; printf("%lld %lld\n",f,s); } }