#include #include #include #include using namespace std; typedef long long ll; const int mod=1000000007; inline int add(int a,int b) { a+=b; if(a>=mod)a-=mod; return a; } inline int dec(int a,int b) { a-=b; if(a<0)a+=mod; return a; } inline int mult(int a,int b) { ll t=1ll*a*b; if(t>=mod)t%=mod; return t; } inline int power(int a,int b) { int out=1; while(b) { if(b&1)out=mult(out,a); a=mult(a,a); b>>=1; } return out; } int T,n,dp[200010][3],cnt[200010],fac[200010],ifac[200010]; bool flag[200010]; inline int C(int a,int b) { if(a=0;i--)ifac[i]=mult(ifac[i+1],i+1); scanf("%d",&T); while(T--) { scanf("%d",&n); fill(cnt,cnt+2*n+1,0); fill(flag,flag+2*n+1,0); for(int i=1,ti;i<=2*n;i++) { scanf("%d",&ti); cnt[ti]++; } for(int i=0;i<=2*n;i++)dp[i][0]=dp[i][1]=dp[i][2]=0; dp[0][0]=1; for(int i=1;i<=2*n;i++) { if(flag[i-1]==0) { flag[i]=cnt[i]&1; if(flag[i]) { dp[i][1]=dp[i][2]=mult(dp[i-1][0],C(cnt[i],cnt[i]/2)); } else { dp[i][0]=mult(dp[i-1][0],C(cnt[i],cnt[i]/2)); } } else { flag[i]=!(cnt[i]&1); if(flag[i]) { dp[i][1]=add(mult(dp[i-1][1],C(cnt[i],cnt[i]/2)),mult(dp[i-1][2],C(cnt[i],cnt[i]/2-1))); dp[i][2]=add(mult(dp[i-1][2],C(cnt[i],cnt[i]/2)),mult(dp[i-1][1],C(cnt[i],cnt[i]/2-1))); } else { dp[i][0]=mult(add(dp[i-1][1],dp[i-1][2]),C(cnt[i],cnt[i]/2)); } } } printf("%d\n",dp[2*n][0]); } return 0; }