#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
typedef long long ll;
const int MOD = 1'000'000'007;
ll socach(ll n, unordered_map<ll, ll>& mps) {
if (mps.find(n) != mps.end()) {
return mps[n];
}
if (n == 1) {
mps[n] = 1;
}
else if (n == 2) {
mps[n] = 3;
}
else {
mps[n] = (socach(n - 1, mps) + 2 * socach(n - 2, mps) % MOD) % MOD;
}
return mps[n];
}
int main() {
int T;
cin >> T;
unordered_map<ll, ll> mps;
for (int i = 0; i < T; i++) {
ll n;
cin >> n;
cout << socach(n, mps) << "\n";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CmNvbnN0IGludCBNT0QgPSAxJzAwMCcwMDAnMDA3OwoKbGwgc29jYWNoKGxsIG4sIHVub3JkZXJlZF9tYXA8bGwsIGxsPiYgbXBzKSB7CiAgICBpZiAobXBzLmZpbmQobikgIT0gbXBzLmVuZCgpKSB7CiAgICAgICAgcmV0dXJuIG1wc1tuXTsKICAgIH0KICAgIGlmIChuID09IDEpIHsKICAgICAgICBtcHNbbl0gPSAxOyAKICAgIH0KICAgIGVsc2UgaWYgKG4gPT0gMikgewogICAgICAgIG1wc1tuXSA9IDM7IAogICAgfQogICAgZWxzZSB7CiAgICAgICAgbXBzW25dID0gKHNvY2FjaChuIC0gMSwgbXBzKSArIDIgKiBzb2NhY2gobiAtIDIsIG1wcykgJSBNT0QpICUgTU9EOwogICAgfQoKICAgIHJldHVybiBtcHNbbl07Cn0KCmludCBtYWluKCkgewogICAgaW50IFQ7CiAgICBjaW4gPj4gVDsKICAgIHVub3JkZXJlZF9tYXA8bGwsIGxsPiBtcHM7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IFQ7IGkrKykgewogICAgICAgIGxsIG47CiAgICAgICAgY2luID4+IG47CiAgICAgICAgY291dCA8PCBzb2NhY2gobiwgbXBzKSA8PCAiXG4iOwogICAgfQoKICAgIHJldHVybiAwOwp9Cg==