#include using namespace std; #define pb push_back #define mp make_pair #define ALL(x) (x).begin(),(x).end() typedef long long ll; typedef pair pii; const int maxn = 2e5 + 70; const int INF = 0x3f3f3f3f; const ll inf = 0x3f3f3f3f3f3f3f3f; const int MOD = 1e9 + 7; const double eps = 1e-7; const double PI = acos(-1.0); int n, m, k; ll fac[maxn], fac_inv[maxn]; void gcd(ll a, ll b, ll &d, ll &x, ll &y){ if (!b){ d = a; x = 1; y = 0; } else{ gcd(b, a%b, d, y, x); y -= x*(a / b); } } ll inv(ll a, ll n){ ll d, x, y; gcd(a, n, d, x, y); return d == 1 ? (x + n) % n : -1; } void get_fac(){ fac[0] = 1; for (int i = 1; i < maxn; i++) fac[i] = (fac[i - 1] * i) % MOD; fac_inv[maxn - 1] = inv(fac[maxn - 1], MOD); for (int i = maxn - 2; i >= 0; i--){ fac_inv[i] = (i + 1) * fac_inv[i + 1] % MOD; } } ll C_mod(ll n, ll m){ return ((fac[n] * fac_inv[m] % MOD) * fac_inv[n - m]) % MOD; } int a[maxn]; int main(){ //freopen("in.txt", "r", stdin); get_fac(); int T; cin>>T; while(T--){ scanf("%d",&n); n*=2; for(int i=1;i<=n;i++) scanf("%d",&a[i]); ll ans=1; int flag=0; for(int i=n,j=i;i>=1;i=j){ while(j>=1 && a[j]==a[i]) j--; int x=i-j; if(!flag){ if(x&1){ ans=ans*C_mod(x,x/2)*2%MOD; flag=1; } else{ ans=ans*C_mod(x,x/2)%MOD; } } else{ if(x&1){ ans=ans*C_mod(x,x/2)%MOD; flag=0; } else{ ans=ans*(C_mod(x,x/2)+C_mod(x,x/2-1))%MOD; } } } printf("%d\n",(int)ans); } return 0; }