#include using namespace std; #define int long long typedef vectorvint; typedef pairpint; typedef vectorvpint; #define rep(i,n) for(int i=0;i<(n);i++) #define reps(i,f,n) for(int i=(f);i<(n);i++) #define all(v) (v).begin(),(v).end() #define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();it++) #define pb push_back #define fi first #define se second templateinline void chmin(A &a,B b){if(a>b)a=b;} templateinline void chmax(A &a,B b){if(a>で表現するバージョン 各要素は、mod=10^9+nとかで計算する */ const int mod=1000000007; typedef vectorvec; typedef vectormat; int mod_pow(int n,int m){ int ret=1; while(m){ if(m&1)ret=ret*n%mod; n=n*n%mod; m>>=1; } return ret; } mat mul(const mat &A,const mat &B){ mat C(A.size(),vec(B[0].size())); for(int i=0;i>=1; } return B; } //正方行列only int det(mat A){ int ret=1; for(int i=0;ivs,vectorA,vectorB){ if(vs.size()<=1)return 1; sort(vs.begin(),vs.end()); vs.erase(unique(vs.begin(),vs.end()),vs.end()); for(int i=0;i>N>>C; vint a(N);rep(i,N)cin>>a[i]; mat X(N,vec(1)); X[0][0]=1; mat A(N,vec(N)); rep(i,N){ for(int j=0;j<=i;j++)A[i][j]=a[i]; } // AC! X=mul(mat_pow(A,C),X); int ans=0; rep(i,N)ans=(ans+X[i][0])%mod; rep(i,N)ans=(ans-mod_pow(a[i],C)+mod)%mod; cout<