a,b杀n个人,每时每刻都必须是b>a
第一个人必定是b杀,所以问题就转化为图像从(1,0) 到(b杀,a杀)不碰y=x的方法数
满足方法数=所有方法数-不满足方法数
不满足方法数计算:从(0,1) 到(b杀,a杀)的方法数(如图只要把每次的路线按y=x对称就是一条(1,0)出发过线的方法)


不满足:
所有
所有-不满足=C(n-1,n/2)

求C(n-1,n/2)= (n-1)!/(n/2)!/(n-1-n/2)!
求阶乘先用线性筛 求出每一个数的逆
在通过逆元的积性
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10, mod=1e9+7;
typedef long long ll;

ll fact[N],invfact[N];
int t,n;

ll C(int n,int m){
//cout<<fact[n]<<" "<<invfact[m]<<" "<<invfact[n-m]<<endl;
	return fact[n]*invfact[m]%mod*invfact[n-m]%mod;
}
void init(){
    fact[0]=1;
    
    for(int i=1;i<=N-5;i++) fact[i]=fact[i-1]*i%mod;
    invfact[0]=invfact[1]=1;
    for(int i=2;i<=N-5;i++) invfact[i]=(mod-(mod/i))*invfact[mod%i]%mod;//每个数的逆
    for(int i=2;i<=N-5;i++) invfact[i]=invfact[i]*invfact[i-1]%mod;//阶乘的逆
}
int main(){
    scanf("%d",&t);
    init();

    for(int i=0;i<t;i++){
        scanf("%d",&n);
        printf("%lld\n",C(n-1,n/2));
    }
    return 0;
}