#include #define MOD 1000000007LL using namespace std; typedef long long ll; typedef pair P; ll n; /* bool flag[5][101]; int cnt=0; int dx[4]={0,1,0,-1}; int dy[4]={1,0,-1,0}; void dfs(int y,int x){ if(y==3 && x==n){ cnt++; return; } flag[y][x]=true; for(int i=0;i<4;i++){ int nx=x+dx[i]; int ny=y+dy[i]; if(nx>=0 && nx<=n && ny>=0 && ny<=3){ if(!flag[ny][nx]){ dfs(ny,nx); } } } flag[y][x]=false; } */ typedef vector vec; typedef vector mat; mat mul(mat &A,mat &B){ mat C(A.size(),vec(B[0].size())); for(int i=0;i0){ if(n&1)B=mul(B,A); A=mul(A,A); n>>=1; } return B; } ll res[12]={1,8,38,184,976,5382,29739,163496,896476,4913258,26932712,147657866}; int main(void){ scanf("%lld",&n); if(n<=11){ printf("%lld\n",res[n]); return 0; } mat B(12,vec(12)); B[0][0]=12; B[0][1]=-54; B[0][2]=124; B[0][3]=-133; B[0][4]=-16; B[0][5]=175; B[0][6]=-94; B[0][7]=-69; B[0][8]=40; B[0][9]=12; B[0][10]=-4; B[0][11]=-1; for(int i=1;i<=11;i++){ for(int j=0;j<=11;j++){ B[i][j]=0; } B[i][i-1]=1; } B=pow(B,n-11); ll ans=0; for(int i=0;i<=11;i++){ ans=(ans+B[0][i]*res[11-i]%MOD+MOD)%MOD; } printf("%lld\n",ans); return 0; }