//#pragma comment(linker, "/STACK:1024000000,1024000000") #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define rep(i,l,r) for(i = l; i <= r; i++) #define red(i,l,r) for(i=(l);i>=(r);i--) #define u_long unsigned long long #define fff(i, u) for(i = head[u]; i != -1; i = nxt[i]) #define fin() freopen("in.txt", "r", stdin) #define fout() freopen("out.txt", "w", stdout) #define clr(vis, a) memset(vis, a, sizeof(vis)) #define LL long long #define ls id << 1 #define rs id << 1 | 1 #define lson id << 1, l, mid #define rson id << 1 | 1, mid + 1, r #define mid ( (l + r) >> 1 ) #define pb push_back #define mp make_pair #define pii pair #define X first #define Y second #define eps 1e-9 #define pi acos(-1) const int maxn = 1e6 + 10; const int maxm = maxn * 4 + 10; const int inf = 1e9; const LL mod = 1e9 + 7; int getint() { char c; while((c = getchar()) && !(c >= '0' && c <= '9') && c != '-'); int ret = c - '0', sgn = 0; if(c == '-') sgn = 1, ret = 0; while((c = getchar()) && c >= '0' && c <= '9') ret = ret * 10 + c - '0'; if(sgn) ret = -ret; return ret; } LL xpow(LL x, LL k){ LL ret = 1; while(k){ if(k & 1) ret = ret * x % mod; x = x * x % mod; k >>= 1; } return ret; } LL ans[maxn]; int main(){ ans[1] = 1, ans[2] = 2; //ans[3] = 4, ans[4] = 9, ans[5] = 21; for(int i = 3; i < maxn; i ++){ LL temp = (2 * i + 1) * ans[i-1] % mod + (3 * i - 3) * ans[i-2] % mod; temp %= mod; temp = temp * xpow(i + 2, mod - 2) % mod; ans[i] = temp; } int T = getint(); while(T --){ int n = getint(); cout << ans[n] << "\n"; } return 0; }