#include #define ALL(v) std::begin(v),std::end(v) using lint=long long; using ld=long double; templateusing numr=std::numeric_limits; lint mod=1'000'000'007;/*{{{*/ lint inverse(lint x){ assert(x%mod); lint y=1,u=mod,v=0; while(x){lint q=u/x;u-=q*x;std::swap(u,x);v-=q*y;std::swap(v,y);} assert(x==0&&std::abs(u)==1&&std::abs(y)==mod&&std::abs(v)>=1){if(y&1)z*=x;x*=x;}return z;}/*}}}*/ struct factorials{ lint sz;std::vectorfact,finv; factorials(lint n):sz(n),fact(n),finv(n){ fact.at(0)=1; for(lint i=1;i=1;i--)finv.at(i-1)=finv.at(i)*i; } mint operator()(lint x)const{return fact.at(x);} mint inv(lint x)const{return finv.at(x);} mint binom(lint n,lint k){assert(0<=n&&n>n>>m; factorials fact(m+1); mint ans=0; for(lint i=1;i<=m;i++){ mint now=((m-i)%2?-1:1)*fact.binom(m,i)*power(mint{i},n); ans+=now; } std::cout<