import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
static final int M = 1000000007;
{
Scanner in
= new Scanner
(System.
in); int t = in.nextInt();
while(t-- > 0)
{
//System.out.println("********NEW TEST CASE************");
int n = in.nextInt();
int[] cpy = new int[n];
int[] s = new int[n];
long pairs = 1;
// Random rn = new Random();
for(int i = 0; i < n; i++)
{
cpy[i] = in.nextInt();
}
for(int i = 0; i < n; i++)
{
s[i] = cpy[n-1-i];
}
int[][] sc = new int[n][2];
int j = 0;
sc[j][1] = 1;
for(int i = 1; i < n; i++)
{
sc[j][0] = s[i-1];
if(s[i] == s[i-1])
{
if(sc[j][1]==0)
{sc[j][1] = 2;}
else
{sc[j][1]++;}
}
else
{
j++;
sc[j][1] = 1;
}
}
sc[j][0] = s[n-1];
/**
System.out.println("\nPrinting SC");
for(int i = 0; i < j+1; i++)
{
System.out.println(sc[i][0] + " " +sc[i][1]);
}
**/
for(int i = 0; i < j; i++)
{
if(sc[i][1] != 0){
if(sc[i][1] == 1)
{
pairs = (pairs * sc[i+1][1])%M;
// System.out.println("80:::" + pairs);
sc[i+1][1] = sc[i+1][1]-1;
}
else
{
if(sc[i][1]%2 == 0){
pairs = (pairs * groupsoftwo(sc[i][1]))%M;
// System.out.println("87:::" + pairs);
}
else
{
pairs = (pairs * groupsoftwo(sc[i][1]) * sc[i+1][1])%M;
// System.out.println("92:::" + pairs);
sc[i+1][1] = sc[i+1][1]-1;
}
}
}
}
if(sc[j][1] > 2){
pairs = (pairs * groupsoftwo(sc[j][1]))%M;
}
}
}
static long groupsoftwo(long x)
{
if((x == 0)||(x == 1))
{
return 0;
}
long f=1;
long pow = x/2;
for(long i = (pow+1), j = (pow+1); i <= x; i++)
{
j = i;
while(((j%2)==0) && pow>0)
{
j /= 2;
pow--;
}
f = (f*j)%M;
}
return f;
}
}