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();
    }
}