#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; typedef long long int ll; typedef pair P; const ll MOD=1e9+7; vector mul(vector a, vector b, vector c){ int m=(int)c.size()-1; vector d(a.size()+b.size()-1); for(int i=0; im){ if(d.back()==0){ d.pop_back(); continue; } for(int i=0; i pow(ll n, vector c){ int m=(int)c.size()-1; vector v{0, 1}, ret{1}; while(n){ if(n&1){ ret=mul(ret, v, c); } v=mul(v, v, c); n>>=1; } return ret; } ll kitamasa(ll n, vector c, vector a){//a[n]=c[k-1]a[n-1]+...+c[0]a[n-k] int m=c.size(); for(int i=0; i v=pow(n, c); ll ret=0; for(int i=0; i>n>>p>>c; ll dp1[51][651]={}, dp2[51][601]={}; dp1[0][0]=1, dp2[0][0]=1; int a[6]={2, 3, 5, 7, 11, 13}, b[6]={4, 6, 8, 9, 10, 12}; for(int i=0; i<6; i++){ for(int j=0; j vc(13*p+12*c+1), va(13*p+12*c); for(int i=1; i<=13*p+12*c; i++) vc[13*p+12*c-i]=(MOD-dp[i])%MOD, va[i-1]=dp0[i-1]; vc[13*p+12*c]=1; vector vp=pow(n-(13*p+12*c), vc); ll ans=0; ll e[1251]={}; for(int i=0; i<13*p+12*c; i++){ for(int j=0; j<13*p+12*c; j++){ (e[i]+=va[j]*vp[j])%=MOD; } vector tmp(13*p+12*c); for(int j=0; j<13*p+12*c-1; j++) tmp[j+1]=vp[j]; for(int j=0; j<13*p+12*c; j++){ (tmp[j]+=(MOD-vc[j])*vp.back())%=MOD; } vp=tmp; } for(int i=0; i<13*p+12*c; i++){ for(int j=13*p+12*c-i; j<=13*p+12*c; j++){ (ans+=dp[j]*e[i])%=MOD; } } cout<