#include #include using namespace std; #include #include template struct Matrix{ vector >dat; int N,M;//N x M matrix Matrix(){} Matrix(int N_):Matrix(N_,N_){} Matrix(int N_,int M_):N(N_),M(M_),dat(N_,vector(M_)){} vector&operator[](int i){return dat[i];} const vector&operator[](int i)const{return dat[i];} static Matrix eye(int N) { Matrix res(N); for(int i=0;i>=1)if(n&1)res=res*a; return res; } template Matrix operator+(const U&A)const { Matrix res(N,M); for(int i=0;i Matrix operator-(const U&A)const { Matrix res(N,M); for(int i=0;i Matrix operator*(const U&A)const { Matrix res(N,M); for(int i=0;i; int N,K; main() { cin>>N>>K; mat dp(2*K*K,2*K*K); mat in(2*K*K,1); for(int i=0;ij&&jk) { int v=j*K+k; dp[v][u]++; dp[K*K+v][K*K+u]++; dp[K*K+v][u]+=k; } } } dp=dp.pow(N-2)*in; mint ans1=0,ans2=0; for(int i=0;i