#include #define For(i,j,k) for (int i=(int)(j);i<=(int)(k);i++) #define Rep(i,j,k) for (int i=(int)(j);i>=(int)(k);i--) #define pii pair #define pll pair #define ll long long #define fi first #define se second #define PB push_back #define uint unsigned #define ull unsigned ll using namespace std; const int mo=1000000007; const int N=1000005; int fac[N],inv[N]; void init(){ fac[0]=inv[0]=inv[1]=1; For(i,2,N-1) inv[i]=1ll*inv[mo%i]*(mo-mo/i)%mo; For(i,1,N-1) fac[i]=1ll*fac[i-1]*i%mo; For(i,1,N-1) inv[i]=1ll*inv[i-1]*inv[i]%mo; } int C(int x,int y){ return 1ll*fac[x]*inv[y]%mo*inv[x-y]%mo; } int n,a[N],q[N]; int f[N][2]; void solve(){ scanf("%d",&n); For(i,1,2*n) scanf("%d",&a[i]); sort(a+1,a+2*n+1); int fir=1; *q=0; For(i,2,2*n+1) if (i==2*n+1||a[i]!=a[i-1]){ q[++*q]=i-fir; fir=i; } For(i,0,*q) For(j,0,1) f[i][j]=0; f[0][0]=1; int S=0; For(i,1,*q){ int nS=(S+q[i]); For(j,0,1) if (S%2||j==0) For(k,0,1) if (nS%2||k==0){ int p1=(q[i]-S%2-nS%2)/2; if (S%2==1&&j==1) p1++; if (nS%2==1&&k==0) p1++; f[i][k]=(f[i][k]+1ll*f[i-1][j]*C(q[i],p1))%mo; } S=nS; } printf("%d\n",(f[*q][0]+f[*q][1])%mo); } int main(){ init(); int T; scanf("%d",&T); while (T--) solve(); }