1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
#include<set>
#include<string>
using namespace std;
typedef long long ll;
vector<int> tobinary(int n){
vector<int> ans;
while(n > 0){
ans.push_back(n%2);
n = n/2;
}
reverse(ans.begin(),ans.end());
return ans;
}
int main(){
ll mod = 1e9 + 7;
int t;
cin >> t;
while(t--){
int n;
cin >> n;
vector<int> nums(n);
for(int i = 0; i < n; i++){
cin >> nums[i];
}
map<int,int> m;
for(auto it : nums){
vector<int> temp = tobinary(it);
for(int i = 0; i < temp.size(); i++){
if(temp[i] == 1) m[temp.size() - i - 1]++;
}
}
set<int> bits;
for(auto it : m){
if(it.second == n) bits.insert(it.first);
}
int allowed = 0;
for(auto it : nums){
bool flag = true;
vector<int> temp = tobinary(it);
for(int i = 0; i < temp.size(); i++){
if(temp[i] == 1 && bits.find(temp.size() - i - 1) == bits.end()) flag = false;
}
if(flag) allowed++;
}
ll ans = 0;
ans += ((ll)allowed * (allowed - 1)) % mod;
int rem = n - 2;
for(int i = rem; i >= 1; i--){
ans = (ans*i)%mod;
}
cout << ans << endl;
}
return 0;
}