#include <iostream>
using namespace std;
typedef long long int ll;
const ll MOD = 1000000007;
ll B[5][5] = {{2}, {1}, {4}, {2}, {1}};
void Matrix_Multi(ll (*a)[5], ll (*b)[5])
{
ll tmp[5][5] = {0};
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
for (int k = 0; k < 5; k++)
{
tmp[i][j] = (tmp[i][j] + a[i][k] * b[k][j]) % MOD;
}
}
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
a[i][j] = tmp[i][j];
}
}
}
ll Martix_Pow(ll b)
{
ll A[5][5] =
{{1, 1, 1, 1, 1},
{1, 0, 0, 0, 0},
{0, 0, 1, 2, 1},
{0, 0, 0, 1, 1},
{0, 0, 0, 0, 1}};
ll res[5][5] = {0};
for (int i = 0; i < 5; i++)
res[i][i] = 1;
while (b)
{
if (b & 1)
{
Matrix_Multi(res, A);
}
Matrix_Multi(A, A);
b >>= 1;
}
ll ans = 0;
for (int i = 0; i < 5; i++)
{
ans = (ans + res[0][i] * B[i][0]) % MOD;
}
return ans;
}
void solve()
{
int T;
cin >> T;
while (T--)
{
ll n;
cin >> n;
if (n == 0)
{
cout << "1\n";
}
else if (n == 1)
{
cout << "2\n";
}
else
{
cout << Martix_Pow(n - 1) << "\n";
}
}
}
int main()
{
solve();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgaW50IGxsOwpjb25zdCBsbCBNT0QgPSAxMDAwMDAwMDA3OwpsbCBCWzVdWzVdID0ge3syfSwgezF9LCB7NH0sIHsyfSwgezF9fTsKCnZvaWQgTWF0cml4X011bHRpKGxsICgqYSlbNV0sIGxsICgqYilbNV0pCnsKICAgIGxsIHRtcFs1XVs1XSA9IHswfTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKQogICAgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNTsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCA1OyBrKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRtcFtpXVtqXSA9ICh0bXBbaV1bal0gKyBhW2ldW2tdICogYltrXVtqXSkgJSBNT0Q7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykKICAgIHsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDU7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIGFbaV1bal0gPSB0bXBbaV1bal07CiAgICAgICAgfQogICAgfQp9CmxsIE1hcnRpeF9Qb3cobGwgYikKewogICAgbGwgQVs1XVs1XSA9CiAgICAgICAge3sxLCAxLCAxLCAxLCAxfSwKICAgICAgICAgezEsIDAsIDAsIDAsIDB9LAogICAgICAgICB7MCwgMCwgMSwgMiwgMX0sCiAgICAgICAgIHswLCAwLCAwLCAxLCAxfSwKICAgICAgICAgezAsIDAsIDAsIDAsIDF9fTsKICAgIGxsIHJlc1s1XVs1XSA9IHswfTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKQogICAgICAgIHJlc1tpXVtpXSA9IDE7CiAgICB3aGlsZSAoYikKICAgIHsKICAgICAgICBpZiAoYiAmIDEpCiAgICAgICAgewogICAgICAgICAgICBNYXRyaXhfTXVsdGkocmVzLCBBKTsKICAgICAgICB9CiAgICAgICAgTWF0cml4X011bHRpKEEsIEEpOwogICAgICAgIGIgPj49IDE7CiAgICB9CiAgICBsbCBhbnMgPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspCiAgICB7CiAgICAgICAgYW5zID0gKGFucyArIHJlc1swXVtpXSAqIEJbaV1bMF0pICUgTU9EOwogICAgfQogICAgcmV0dXJuIGFuczsKfQoKdm9pZCBzb2x2ZSgpCnsKICAgIGludCBUOwogICAgY2luID4+IFQ7CiAgICB3aGlsZSAoVC0tKQogICAgewogICAgICAgIGxsIG47CiAgICAgICAgY2luID4+IG47CiAgICAgICAgaWYgKG4gPT0gMCkKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQgPDwgIjFcbiI7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKG4gPT0gMSkKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQgPDwgIjJcbiI7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQgPDwgTWFydGl4X1BvdyhuIC0gMSkgPDwgIlxuIjsKICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgc29sdmUoKTsKICAgIHJldHVybiAwOwp9