0分WA求助!!!
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int mod=1e9+7;
int n;
struct node
{
long long a[10][10];
node()
{
memset(a,0,sizeof a);
}
}p,ans;
inline void init()
{
memset(ans.a,0,sizeof(ans.a));
for(int i=1;i<=3;++i)
{
ans.a[i][i]=1;
}
memset(p.a,0,sizeof(p.a));
p.a[1][1]=1;
p.a[1][3]=1;
p.a[2][1]=1;
p.a[3][2]=1;
}
node operator *(const node &x,const node &y)
{
node p;
for(int i=1;i<=3;++i)
{
for(int j=1;j<=3;++j)
{
for(int k=1;k<=3;++k)
{
p.a[i][j]+=((x.a[i][k]%mod)*(y.a[k][j]%mod))%mod;
}
}
}
return p;
}
inline void ksm(int k)
{
while(k)
{
if(k&1) ans=ans*p;
p=p*p;
k>>=1;
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
if(n<=3)
{
printf("1\n");
continue;
}
init();
ksm(n);
printf("%lld\n",ans.a[2][1]);
}
return 0;
}