mod = int(1e9 + 7) def mul(m1, m2): m2 = list(zip(*m2)) return [ [sum(x * y for x, y in zip(m1[i], m2[j])) % mod for j in range(3)] for i in range(3) ] def pow(n): acc = [[1, 0, 0], [0, 1, 0], [0, 0, 1]] bof = [[0, 1, 0], [0, 0, 1], [1, 0, 1]] while n: if n & 1: acc = mul(acc, bof) bof = mul(bof, bof) n >>= 1 return acc t = int(input()) for _ in range(t): n = int(input()) print(pow(n)[-1][0])
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int Mod = 1e9 + 7;
vector<vector<ll>> mul(const vector<vector<ll>>& a,
const vector<vector<ll>>& b) {
vector<vector<ll>> res(3, vector<ll>(3, 0));
for(int i = 0; i < 3; i++) {
for (int k = 0; k < 3; k++) {
if (a[i][k])
for (int j = 0; j < 3; j++) {
res[i][j] = (res[i][j] + a[i][k] * b[k][j]) % Mod;
}
}
}
return res;
}
vector<vector<ll>> mat_pow(vector<vector<ll>> a, ll k) {
vector<vector<ll>> res = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};
while (k > 0) {
if (k & 1) res = mul(res, a);
a = mul(a, a);
k >>= 1;
}
return res;
}
ll solve(ll n) {
if (n == 1 || n == 2 || n == 3) return 1;
vector<vector<ll>> mat = {
{1, 0, 1},
{1, 0, 0},
{0, 1, 0}
};
auto m = mat_pow(mat, n - 3);
return (m[0][0] * 1 + m[0][1] * 1 + m[0][2] * 1) % Mod;
}
int main() {
int q;cin>>q;
ll n;
while(q--){
cin>>n;
cout<<solve(n)<<endl;
}
return 0;
}