#include using namespace std; #define ALL(x) x.begin(),x.end() #define rep(i,n) for(int i=0;i<(n);i++) #define debug(v) cout<<#v<<":";for(auto x:v){cout<bool chmax(T &a,const T &b){if(abool chmin(T &a,const T &b){if(bn-r) r=n-r; if(r==0) return 1; ll a=1; for(ll i=0;i vector> matplus(vector> a,vector> b){ asert(a.size()==b.size() and a[0].size()==b[0].size()); for(int i=0;i vector> matminus(vector> a,vector> b){ asert(a.size()==b.size() and a[0].size()==b[0].size()); for(int i=0;i vector> matmul(vector> a,vector> b){ assert(a[0].size()==b.size()); int n=b.size(); vector> ret(a.size(),vector(b[0].size(),0)); for(int i=0;i vector> matpow(vector> a,ll k){ assert(a.size()==a[0].size()); int n=a.size(); vector> ret(n,vector(n,0)); for(int i=0;i0){ if(k&1) ret=matmul(ret,a); a=matmul(a,a); k>>=1; } return ret; } //mod vector> matplus_mod(vector> a,vector> b){ assert(a.size()==b.size() and a[0].size()==b[0].size()); for(int i=0;i=mod) a[i][j]-=mod; } } return a; } vector> matminus_mod(vector> a,vector> b){ assert(a.size()==b.size() and a[0].size()==b[0].size()); for(int i=0;i> matmul_mod(vector> a,vector> b){ assert(a[0].size()==b.size()); int n=b.size(); vector> ret(a.size(),vector(b[0].size(),0)); for(int i=0;i> matpow_mod(vector> a,ll k){ assert(a.size()==a[0].size()); int n=a.size(); vector> ret(n,vector(n,0)); for(int i=0;i0){ if(k&1) ret=matmul_mod(ret,a); a=matmul_mod(a,a); k>>=1; } return ret; } signed main(){ cin.tie(0); ios::sync_with_stdio(0); const ll i6=inv_mod(6); ll n;cin>>n; vector> mat(6,vector(6,0)); rep(j,6)mat[5][j]=i6; mat[0][1]=1;mat[1][2]=1;mat[2][3]=1;mat[3][4]=1;mat[4][5]=1; vector> p(6,vector(1)); p[0][0]=1; for(int i=1;i<6;i++){ ll s=0; rep(j,i){ s+=p[j][0]; s%=mod; } s=s*i6%mod; p[i][0]=s; } auto res=matpow_mod(mat,n); res=matmul_mod(res,p); cout<