import java.util.Scanner;
public class Main {
static final int MOD = 1000000007;
static final int MAX_N = 100000;
static long[] len = new long[MAX_N + 1]; // 存储S_n的长度
static long[] cnt1 = new long[MAX_N + 1]; // 存储S_n中'1'的数量
static long[] inv = new long[MAX_N + 1]; // 存储S_n中逆序对的数量
// 静态初始化块,预处理所有需要的数据
static {
// 初始化长度数组
len[1] = 1;
len[2] = 1;
for (int i = 3; i <= MAX_N; i++) {
len[i] = (len[i - 2] + len[i - 1]) % MOD;
}
// 初始化'1'的数量数组
cnt1[1] = 0; // S₁是"0",没有'1'
cnt1[2] = 1; // S₂是"1",有1个'1'
for (int i = 3; i <= MAX_N; i++) {
cnt1[i] = (cnt1[i - 2] + cnt1[i - 1]) % MOD;
}
// 初始化逆序对数量数组
inv[1] = 0; // S₁中没有逆序对
inv[2] = 0; // S₂中没有逆序对
for (int i = 3; i <= MAX_N; i++) {
// 逆序对 = 前两部分的逆序对 + 跨部分的新逆序对
inv[i] = (inv[i - 2] + inv[i - 1]) % MOD;
// 计算S_{i-1}中'0'的数量
long cnt0 = (len[i - 1] - cnt1[i - 1] + MOD) % MOD;
// 跨部分的逆序对数量 = S_{i-2}中'1'的数量 * S_{i-1}中'0'的数量
long cross = (cnt1[i - 2] * cnt0) % MOD;
inv[i] = (inv[i] + cross) % MOD;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
// 处理每组测试数据
while (T-- > 0) {
int n = sc.nextInt();
System.out.println(inv[n]);
}
sc.close();
}
}