#include <bits/stdc++.h>
#define FNAME "CNTINVERSE"
using namespace std;
const int MAXN = 501;
typedef long long ll;
const ll MOD = 1e15 + 7;
void fastip() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if (fopen(FNAME".inp", "r")) {
freopen(FNAME".inp", "r", stdin);
freopen(FNAME".out", "w", stdout);
}
}
int t;
struct fibo{
long long t[4][4] = {
{1,1,0,0},
{0,1,1,1},
{0,1,0,0},
{0,0,1,0},
};
fibo operator * (const fibo &m) const{
fibo res;
for(int i = 0; i < 4 ; i++){
for(int j = 0; j < 4 ; j++){
long long sum = 0;
for(int k = 0; k < 4 ; k++){
sum = (sum % MOD + (t[i][k] % MOD * m.t[k][j] % MOD) % MOD) % MOD;
}
res.t[i][j] = sum % MOD;
}
}
return res;
}
};
fibo indian_pow(fibo base, long long n){
if(n == 1){
return base;
}
fibo k = indian_pow(base, n / 2);
if(n % 2 == 0){
return k * k;
}else{
return k * k * base;
}
}
int main(){
fastip();
cin >> t;
while(t--){
long long n;
cin >> n;
if (n == 1) {
cout << 1 << endl;
} else if (n == 2) {
cout << 3 << endl;
} else if (n == 3) {
cout << 6 << endl;
} else {
fibo k;
fibo res = indian_pow(k , n - 2);
cout << (res.t[0][0] * 3 + res.t[0][1] * 3 + res.t[0][2] * 2 + res.t[0][3] * 1) % MOD << endl;
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgRk5BTUUgIkNOVElOVkVSU0UiCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBNQVhOID0gNTAxOwp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKY29uc3QgbGwgTU9EID0gMWUxNSArIDc7Cgp2b2lkIGZhc3RpcCgpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGlmIChmb3BlbihGTkFNRSIuaW5wIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4oRk5BTUUiLmlucCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oRk5BTUUiLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KfQoKaW50IHQ7CiAKc3RydWN0IGZpYm97CiAgICBsb25nIGxvbmcgdFs0XVs0XSA9IHsKICAgICAgICB7MSwxLDAsMH0sICAKICAgICAgICB7MCwxLDEsMX0sICAKICAgICAgICB7MCwxLDAsMH0sICAgICAgCiAgICAgICAgezAsMCwxLDB9LAogICAgfTsKICAgIGZpYm8gb3BlcmF0b3IgKiAoY29uc3QgZmlibyAmbSkgY29uc3R7CiAgICAgICAgZmlibyByZXM7CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IDQgOyBpKyspewogICAgICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgNCA7IGorKyl7CiAgICAgICAgICAgICAgICBsb25nIGxvbmcgc3VtID0gMDsKICAgICAgICAgICAgICAgIGZvcihpbnQgayA9IDA7IGsgPCA0IDsgaysrKXsKICAgICAgICAgICAgICAgICAgICBzdW0gPSAoc3VtICUgTU9EICsgKHRbaV1ba10gJSBNT0QgKiBtLnRba11bal0gJSBNT0QpICUgTU9EKSAlIE1PRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJlcy50W2ldW2pdID0gc3VtICUgTU9EOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXM7CiAgICB9Cn07CgpmaWJvIGluZGlhbl9wb3coZmlibyBiYXNlLCBsb25nIGxvbmcgbil7CiAgICBpZihuID09IDEpewogICAgICAgIHJldHVybiBiYXNlOwogICAgfQogICAgZmlibyBrID0gaW5kaWFuX3BvdyhiYXNlLCBuIC8gMik7CiAgICBpZihuICUgMiA9PSAwKXsKICAgICAgICByZXR1cm4gayAqIGs7CiAgICB9ZWxzZXsKICAgICAgICByZXR1cm4gayAqIGsgKiBiYXNlOwogICAgfQp9CgppbnQgbWFpbigpewogICAgZmFzdGlwKCk7CgogICAgY2luID4+IHQ7CgogICAgd2hpbGUodC0tKXsKICAgICAgICBsb25nIGxvbmcgbjsKICAgICAgICBjaW4gPj4gbjsKICAgICAgICBpZiAobiA9PSAxKSB7CiAgICAgICAgICAgIGNvdXQgPDwgMSA8PCBlbmRsOwogICAgICAgIH0gZWxzZSBpZiAobiA9PSAyKSB7CiAgICAgICAgICAgIGNvdXQgPDwgMyA8PCBlbmRsOwogICAgICAgIH0gZWxzZSBpZiAobiA9PSAzKSB7CiAgICAgICAgICAgIGNvdXQgPDwgNiA8PCBlbmRsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZpYm8gazsKICAgICAgICAgICAgZmlibyByZXMgPSBpbmRpYW5fcG93KGsgLCBuIC0gMik7CiAgICAgICAgICAgIGNvdXQgPDwgKHJlcy50WzBdWzBdICogMyArIHJlcy50WzBdWzFdICogMyArIHJlcy50WzBdWzJdICogMiArIHJlcy50WzBdWzNdICogMSkgJSBNT0QgIDw8IGVuZGw7CiAgICAgICAgfSAgIAogICAgfQogICAgcmV0dXJuIDA7Cn0=