#include <math.h>
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
using ull = unsigned long long;
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
}
const ll mod=1e9+7;
ll add(ll a, ll b) { return ((a % mod) + (b % mod)) % mod; }
ll mul(ll a, ll b) { return ((a % mod) * (b % mod)) % mod; }
ll sub(ll a, ll b) { return ((a % mod) - (b % mod) + mod) % mod; }
ll fast_power(ll base,ll power) {
ll res=1;
while (power>0) {
if (power&1)res=mul(res,base);
base=mul(base,base),power>>=1;
}
return res;
}
int main() {
Code_By_Mohamed_Khaled();
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]++;
if (n==1) {
cout<<0<<"\n";
continue;
}
// cout<<fast_power(2,mp.size())<<"\n";
ll ans=add(fast_power(2,mp.size()),mod-1);
for (auto it:mp) {
if (it.second>1)ans=mul(ans,it.second-1);
}
cout<<add(ans,mod-mp.size())<<"\n";
}
return 0;
}
I2luY2x1ZGUgPG1hdGguaD4KI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnR5cGVkZWYgbG9uZyBsb25nIGxsOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyB1bGwgPSB1bnNpZ25lZCBsb25nIGxvbmc7CnZvaWQgQ29kZV9CeV9Nb2hhbWVkX0toYWxlZCgpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKICAgIGNvdXQudGllKG51bGxwdHIpOwojaWZuZGVmIE9OTElORV9KVURHRQogICAgZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbik7CiAgICBmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwojZW5kaWYKfQpjb25zdCBsbCBtb2Q9MWU5Kzc7CmxsIGFkZChsbCBhLCBsbCBiKSB7IHJldHVybiAoKGEgJSBtb2QpICsgKGIgJSBtb2QpKSAlIG1vZDsgfQpsbCBtdWwobGwgYSwgbGwgYikgeyByZXR1cm4gKChhICUgbW9kKSAqIChiICUgbW9kKSkgJSBtb2Q7IH0KbGwgc3ViKGxsIGEsIGxsIGIpIHsgcmV0dXJuICgoYSAlIG1vZCkgLSAoYiAlIG1vZCkgKyBtb2QpICUgbW9kOyB9CmxsIGZhc3RfcG93ZXIobGwgYmFzZSxsbCBwb3dlcikgewogICAgbGwgcmVzPTE7CiAgICB3aGlsZSAocG93ZXI+MCkgewogICAgICAgIGlmIChwb3dlciYxKXJlcz1tdWwocmVzLGJhc2UpOwogICAgICAgIGJhc2U9bXVsKGJhc2UsYmFzZSkscG93ZXI+Pj0xOwogICAgfQogICAgcmV0dXJuIHJlczsKfQppbnQgbWFpbigpIHsKICAgIENvZGVfQnlfTW9oYW1lZF9LaGFsZWQoKTsKICAgIGxsIHQ7Y2luPj50OwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIGxsIG47Y2luPj5uOwogICAgICAgIHZlY3RvcjxsbD52KG4pO21hcDxsbCxsbD5tcDsKICAgICAgICBmb3IgKGF1dG8gJml0OnYpY2luPj5pdCxtcFtpdF0rKzsKICAgICAgICBpZiAobj09MSkgewogICAgICAgICAgICBjb3V0PDwwPDwiXG4iOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgLy8gY291dDw8ZmFzdF9wb3dlcigyLG1wLnNpemUoKSk8PCJcbiI7CiAgICAgICAgbGwgYW5zPWFkZChmYXN0X3Bvd2VyKDIsbXAuc2l6ZSgpKSxtb2QtMSk7CiAgICAgICAgZm9yIChhdXRvIGl0Om1wKSB7CiAgICAgICAgICAgIGlmIChpdC5zZWNvbmQ+MSlhbnM9bXVsKGFucyxpdC5zZWNvbmQtMSk7CiAgICAgICAgfQogICAgICAgIGNvdXQ8PGFkZChhbnMsbW9kLW1wLnNpemUoKSk8PCJcbiI7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==