//考点:斐波那契数列/动态规划dp
#include <iostream>
using namespace std;
#define ll long long
const int MOD = 1e9 + 7;
const int MAX = 100005;
ll N[100005];
ll one[100005];
ll zero[100005];//这个斐波那契数列1由前面的1与后面的0决定,单独储存,1与0都各自形成斐波那契
int main() {
cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);
ll n, T;
cin >> T;
one[1] = 0;one[2] = 1;zero[1] = 1;zero[2] = 0;N[1] = 0;N[2] = 0;N[3] = 0;N[4] = 1, N[5] = 2;
//初始化
//以下为拼接过程
//0 1 01 101 01101 10101101 0110110101101
//0 0 0 1 2 7
//one[i-2]*zero[i-1]+N[i-1]+N[i-2]
//动态规划
for (int i = 3; i < 100005; i++) {
one[i] = (one[i - 1] % MOD) + (one[i - 2] % MOD);
zero[i] = (zero[i - 1] % MOD) + (zero[i - 2] % MOD);
N[i] = (N[i - 1] % MOD) + (N[i - 2] % MOD) + //先把两串自身的算上
(one[i - 2] % MOD) * (zero[i - 1] % MOD);//(前后关系)拼接后前面的每一个1都与后面的形成逆序
N[i] %= MOD;
}
while (T--) {
cin >> n;
cout << N[n] << '\n';
}
}