import java.util.Scanner;
/**
* @author supermejane
* @date 2025/10/6
* @description BGN61 斐波那契字符串
*/
public class Main {
public static int[][] cache = new int[100005][3];
public static boolean[] visit = new boolean[100005];
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
while (n-- > 0) {
int k = in.nextInt();
int[] a = new int[3];
dfs(k, a);
System.out.println(a[2]);
}
}
//a[0] 0的数量, a[1] 1的数量, a[2] 逆序对数量
public static void dfs(int n, int[] a) {
if (n == 1) {
a[0] = 1;
a[1] = 0;
a[2] = 0;
} else if (n == 2) {
a[0] = 0;
a[1] = 1;
a[2] = 0;
} else if (n > 2) {
if (visit[n]) {
System.arraycopy(cache[n], 0, a, 0, 3);
return;
}
dfs(n - 1, a);
int[] b = new int[3];
//System.arraycopy(a, 0, b, 0, 3);
dfs(n - 2, b);
int base = (int)1e9 + 7;
a[2] = (int) ((a[2] + b[2] + (long) a[0] * b[1]) % base);
a[0] = (a[0] + b[0]) % base;
a[1] = (a[1] + b[1]) % base;
System.arraycopy(a, 0, cache[n], 0, 3);
visit[n] = true;
}
}
}
//1. 清楚递归流程
//2. 然后需要对递归使用记忆化搜索进行优化, 从o(2 ^ n)变为o(n),注意这是一个后续遍历
//3. 注意精度
//4. 参数使用引用注意int[] b = new int[3]; 也可以使用public static int[] dfs(int n)