| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 
 | #include<cstdio>#include<cstring>
 #define cl(x,y) memset(x,y,sizeof(x))
 typedef long long ll;
 
 const ll tt=1e9+7;
 ll n;
 struct matrix{
 ll s[9][9];
 void E() {cl(s,0);for (int i=1;i<=4;i++) s[i][i]=1;}
 }A,ans;
 matrix operator*(const matrix&a,const matrix&b){
 matrix c;cl(c.s,0);
 for (int i=1;i<=4;i++)
 for (int j=1;j<=4;j++)
 for (int k=1;k<=4;k++)
 (c.s[i][j]+=a.s[i][k]*b.s[k][j]%tt)%=tt;
 return c;
 }
 matrix power(matrix a,ll b){
 matrix w,res;res.E();w=a;
 while (b){
 if (b&1) res=res*w;
 w=w*w;
 b>>=1;
 }
 return res;
 }
 int main(){
 scanf("%lld",&n); if (n==1) return printf("2"),0;
 A.s[1][1]=A.s[2][1]=A.s[4][2]=A.s[1][3]=A.s[2][3]=A.s[3][4]=A.s[4][4]=1;
 ans.s[1][1]=ans.s[1][2]=ans.s[1][3]=ans.s[1][4]=1;
 ans=ans*power(A,n-2);
 printf("%lld",(ans.s[1][1]+ans.s[1][2]+ans.s[1][3]+ans.s[1][4])%tt);
 return 0;
 }
 
 |