#include using namespace std; typedef long long ll; const int MAXN=200005,MOD=1000000007; int n,a[MAXN],fac[MAXN],b[MAXN],m; int qmi(int x,int y) { int ans=1; for(;y;y>>=1,x=1ll*x*x%MOD) if(y&1)ans=1ll*ans*x%MOD; return ans; } int calc(int x,int y){return 1ll*fac[x]*qmi(1ll*fac[y]*fac[x-y]%MOD,MOD-2)%MOD;} void solve() { scanf("%d",&n); fac[0]=1; for(int i=1;i<=2*n;i++)fac[i]=1ll*fac[i-1]*i%MOD; int cur=0,ans=1;m=0; for(int i=1;i<=2*n;i++) scanf("%d",&a[i]); for(int i=1;i<=2*n;i++) if(i==2*n || a[i]!=a[i+1])b[++m]=i; for(int i=1;i<=m;i++) { if(!(b[i]&1)) ans=1ll*ans*calc(b[i]-b[i-1],(b[i]-b[i-1])>>1)%MOD; else { if(b[i-1]&1)ans=1ll*ans*( calc(b[i]-b[i-1],(b[i]-b[i-1])/2-1) + calc(b[i]-b[i-1],(b[i]-b[i-1])/2) )%MOD; else ans=2ll*ans*calc(b[i]-b[i-1],(b[i]-b[i-1])/2)%MOD; } } printf("%d\n",ans); } int main() { #ifndef ONLINE_JUDGE freopen("code.in","r",stdin); //freopen("code.out","w",stdout); #endif int T; scanf("%d",&T); while(T--)solve(); return 0; }