#include<bits/stdc++.h>
using namespace std;
#define int long long
#define M 1000000007
long long gcd (long long a, long long b){
 
	if(b==0)
		return a;
	else
		return gcd(b,a%b);
}
int bsearch(int l,int h,int a[],int key){
	int m =(l+h)/2;
	int ans=-1;
	while(l<=h){
		if(a[m]==key)
			{	ans=m;
				break;
			}
			else if(a[m]<key)
				l=m+1;
			else
				h=m-1;
		}
 
		return ans;
	}
	long long bin(long long a, long long b, long long m)
	{
		a = a % m;
		long long res=1;
		while(b>0)
		{
			if(b & 1)
				res= res *a %m;
			a = a* a %m;
			b= b>>1;
		}
		return res;
	}
long long ncr(int n, int r)
	{
		long long res=1;
		for(int i=0;i<r;i++)
		{
			res=res*(n-i);
			res=res/(i+1);
		}
 
		return res;
	}
int find(int i,vector< int >p)
	{
	    while(p[i]!=i)
	    i=p[i];
	    return i;
	}
	void join(int u,int v, vector< int >&p)
	{
	    int x=find(u,p);
	    int y=find(v,p);
	    p[x]=p[y];
 
	}

int32_t main(){
 
	#ifndef ONLINE_JUDGE
		freopen("input.txt", "r", stdin);
		freopen("output.txt", "w", stdout);
	#endif
		ios_base::sync_with_stdio(false);
	cin.tie(NULL);cout.tie(NULL);
		int t;
		cin>>t;
		int fact[200000+1];
		fact[0]=1;
		fact[1]=1;
		for(long long i=2;i<=200000;i++)
		{
			fact[i]= (i*fact[i-1])%M;
		}
		while(t--)
		{
			int n;
			cin>>n;
			int a[n];
			for(int i=0;i<n;i++)
				cin>>a[i];
			int x=a[0];
			for(int i=0;i<n;i++)
			{
				x= (x & a[i]);
			}
			int c=0;
			for(int i=0;i<n;i++)
			{
				if(a[i]==x)
					c++;
			}
			if(c<2){
			cout<<0<<endl;	
			continue;	
				}
			else
			{
				int  ans=0;
				ans= (((c*(c-1)%M))*fact[n-2])%M;
				cout<<ans<<endl;
			}
		
	}
	return 0;
}