#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define X first #define Y second #define pb push_back #define rep(X,Y) for (int (X) = 0;(X) < (Y);++(X)) #define rrep(X,Y) for (int (X) = (Y-1);(X) >=0;--(X)) #define repe(X,Y) for ((X) = 0;(X) < (Y);++(X)) #define peat(X,Y) for (;(X) < (Y);++(X)) #define all(X) (X).begin(),(X).end() #define rall(X) (X).rbegin(),(X).rend() using namespace std; typedef long long ll; typedef pair pii; typedef pair pll; template using vv=vector>; template ostream& operator<<(ostream &os, const vector &t) { os<<"{"; rep(i,t.size()) {os< ostream& operator<<(ostream &os, const pair &t) { return os<<"("< > matl; typedef vector > matd; template vector operator*(T &a,vector &v){ rep(i,v.size()) v[i]=Mod(v[i]*a); return v; } template vector operator+(vector v,vector &w){ rep(i,v.size()) v[i]=Mod(v[i]+w[i]); return v; } template vector > matE(T n){ vector > re(n,vector(n)); rep(i,n) re[i][i]=1; return re; } templatevector >matE(vector >mat){ return matE((T)(mat.size())); } template vector > transpose(const vector > &a, vector> &re){ re.resize(a[0].size(),vector(a.size())); rep(i,a[0].size()) rep(j,a.size()) re[i][j]=a[j][i]; return re; } template T operator*(const vector &a, const vector &b){ T re=0; rep(i,a.size()) re=Mod(re+Mod(a[i]*b[i])); return re; } template vector > operator*(const vector > &a ,const vector > &b_){ vector > b; transpose(b_,b); vector > re(a.size(),vector(b.size())); rep(i,a.size()) rep(j,b.size()) re[i][j]=a[i]*b[j]; return re; } template vector > pow(vector > a,ll n){ vector > re; if(n==0) return matE(a); re=pow(a,n/2); return re*re*(n%2?a:matE(a)); } void solve(ll n,ll t,vector &aa){ matl a(n+1,vector(n+1)),v(n+1,vector(1)); rep(i,n) a[n-1][i]=1; rep(i,n-1) a[i][i+1]=1; a[n][n-1]=a[n][n]=1; rep(i,n) v[n][0]+=v[i][0]=aa[i]; v[n][0]-=aa[n-1]; matl re=pow(a,t-n)*v; //cout< a){ ll sum=0,re=0;; rep(i,n) (sum+=a[i])%=MOD; re=sum; a.resize(t); for(int i=n;i>n>>t; vector a(n); rep(i,n) cin>>a[i]; if(n<=30){ solve(n,t,a); }else{ solve2(n,t,a); } return 0; }