#include <stdio.h>
#include <iostream>
#include<string.h>
using namespace std;
int MOD = 1000000007;
struct Mat{
__int64 a[3][3];
int i,j,k;
void init()
{
memset(a, 0, sizeof(a));
a[0][0] = a[1][1] = a[2][2] = 1; //n=1时 矩阵为(1,1,1)
}
Mat operator *(const Mat &b)
{
Mat t;
t.init();
for(i=0;i<3;i++)
{
for(j=0; j<3; j++)
{
t.a[i][j]=0;
for(k=0;k<3;k++)
{
t.a[i][j]=(t.a[i][j]+a[i][k]*b.a[k][j])%MOD;
}
}
}
return t;
}
};
Mat powmod(Mat x, int b)
{
Mat r;
r.init();
while(b)
{
if(b & 1)
{
r = r * x;
}
x = x * x;
b >>= 1;
}
return r;
}
int main()
{
int t,n;
int i,j;
scanf("%d", &t);
while(t--)
{
scanf("%d", &n);
Mat x;
x.a[0][0] = 1; x.a[0][1] = 2; x.a[0][2] = 3;
x.a[1][0] = 4, x.a[1][1] = 5; x.a[1][2] = 6;
x.a[2][0] = 7; x.a[2][1] = 8; x.a[2][2] = 9;
x=powmod(x,n-1); //n-1==0时也可以
__int64 ans = 0;
for(i = 0; i < 3; ++i)
{
for(j = 0; j < 3; ++j)
{
ans=(ans+x.a[i][j])%MOD;
}
}
printf("%I64d\n", ans);
}
return 0;
}
1 2 3
(r,g,b) 4 5 6
7 8 9