#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
void Code_By_Mohamed_Khaled() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
#endif
}
ll mod = 1e9 + 7;
ll add(ll a, ll b) { return ((b % mod) + (a % mod)) % mod; }
ll mul(ll a, ll b) { return ((b % mod) * (a % mod)) % mod; }
ll fast_power(ll base, ll power) {
ll res=1;
while(power) {
if (power & 1)res=mul(res,base);
base=mul(base,base);
power >>= 1;
}
return res;
}
vector<ll>fact(2e6+5,0),inv_fact(2e6+5);
void precompute() {
fact[0]=fact[1]=1;ll N=2e6;
inv_fact[0]=1;
for (ll i=2;i<=2e6;i++) {
fact[i]=mul(fact[i-1],i);
}
inv_fact[N]=fast_power(fact[N],mod-2);
for (ll i=2e6-1;i>0;i--) {
inv_fact[i]=mul(inv_fact[i+1],i+1);
}
}
ll comb(int n, int r) {
if (r > n || r < 0) return 0;
return mul(mul(fact[n], inv_fact[r]), inv_fact[n - r]);
}
int main() {
Code_By_Mohamed_Khaled();
precompute();
ll t;cin>>t;
while (t--) {
ll n;cin>>n;
vector<ll>v(n);map<ll,ll>mp;
for (auto &it:v)cin>>it,mp[it]++;
ll res=1;
for (auto it:mp) {
res=mul(res,it.second+1);
}
res-=(mp.size()+1);
res+=2*mod;res%=mod;
cout<<res<<"\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnR5cGVkZWYgbG9uZyBsb25nIGxsOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwp2b2lkIENvZGVfQnlfTW9oYW1lZF9LaGFsZWQoKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICBjb3V0LnRpZShudWxscHRyKTsKI2lmbmRlZiBPTkxJTkVfSlVER0UKICAgIGZyZW9wZW4oImlucHV0LnR4dCIsInIiLHN0ZGluKTsKICAgIGZyZW9wZW4oIm91dHB1dC50eHQiLCJ3IixzdGRvdXQpOwojZW5kaWYKfQpsbCBtb2QgPSAxZTkgKyA3OwpsbCBhZGQobGwgYSwgbGwgYikgeyByZXR1cm4gKChiICUgbW9kKSArIChhICUgbW9kKSkgJSBtb2Q7IH0KbGwgbXVsKGxsIGEsIGxsIGIpIHsgcmV0dXJuICgoYiAlIG1vZCkgKiAoYSAlIG1vZCkpICUgbW9kOyB9CmxsIGZhc3RfcG93ZXIobGwgYmFzZSwgbGwgcG93ZXIpIHsKICAgIGxsIHJlcz0xOwogICAgd2hpbGUocG93ZXIpIHsKICAgICAgICBpZiAocG93ZXIgJiAxKXJlcz1tdWwocmVzLGJhc2UpOwogICAgICAgIGJhc2U9bXVsKGJhc2UsYmFzZSk7CiAgICAgICAgcG93ZXIgPj49IDE7CiAgICB9CiAgICByZXR1cm4gcmVzOwp9CnZlY3RvcjxsbD5mYWN0KDJlNis1LDApLGludl9mYWN0KDJlNis1KTsKdm9pZCBwcmVjb21wdXRlKCkgewogICAgZmFjdFswXT1mYWN0WzFdPTE7bGwgTj0yZTY7CiAgICBpbnZfZmFjdFswXT0xOwogICAgZm9yIChsbCBpPTI7aTw9MmU2O2krKykgewogICAgICAgIGZhY3RbaV09bXVsKGZhY3RbaS0xXSxpKTsKICAgIH0KICAgIGludl9mYWN0W05dPWZhc3RfcG93ZXIoZmFjdFtOXSxtb2QtMik7CiAgICBmb3IgKGxsIGk9MmU2LTE7aT4wO2ktLSkgewogICAgICAgIGludl9mYWN0W2ldPW11bChpbnZfZmFjdFtpKzFdLGkrMSk7CiAgICB9Cn0KbGwgY29tYihpbnQgbiwgaW50IHIpIHsKICAgIGlmIChyID4gbiB8fCByIDwgMCkgcmV0dXJuIDA7CiAgICByZXR1cm4gbXVsKG11bChmYWN0W25dLCBpbnZfZmFjdFtyXSksIGludl9mYWN0W24gLSByXSk7Cn0KaW50IG1haW4oKSB7CiAgICBDb2RlX0J5X01vaGFtZWRfS2hhbGVkKCk7CiAgICBwcmVjb21wdXRlKCk7CiAgICBsbCB0O2Npbj4+dDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBsbCBuO2Npbj4+bjsKICAgICAgICB2ZWN0b3I8bGw+dihuKTttYXA8bGwsbGw+bXA7CiAgICAgICAgZm9yIChhdXRvICZpdDp2KWNpbj4+aXQsbXBbaXRdKys7CiAgICAgICAgbGwgcmVzPTE7CiAgICAgICAgZm9yIChhdXRvIGl0Om1wKSB7CiAgICAgICAgICAgIHJlcz1tdWwocmVzLGl0LnNlY29uZCsxKTsKICAgICAgICB9CiAgICAgICAgcmVzLT0obXAuc2l6ZSgpKzEpOwogICAgICAgIHJlcys9Miptb2Q7cmVzJT1tb2Q7CiAgICAgICAgY291dDw8cmVzPDwiXG4iOwogICAgfQogICAgcmV0dXJuIDA7Cn0=