// ROOT : DRAGON3012009
#include <bits/stdc++.h>
#define ll long long // https://m...content-available-to-author-only...a.nz/file/vJsRUbYY#B97-LFnpFJ0QTsdzI8fE-VdYS2NFByMNjIqYeE3NAa8
#define ld long double
#define el "\n"
#define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define __ROOT__ int main()
#pragma GCC optimize("O2")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
#define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
#define FORD(i,r,l) for(int i = r ; i >= l ; i --)
#define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
#define fi first
#define se second
#define M 998244353
#define MAXN 1000001
#define INF (1ll<<30) // https://c...content-available-to-author-only...s.com/group/rpEhKtCb3Q/contest/626452/problem/D
#define BLOCK_SIZE 425
#define MAX_NODE 1001001
#define LOG 19
#define ALPHA_SIZE 26
#define BASE 256
#define NAME "file"
#define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
using namespace std;
using namespace chrono ;
const ll MOD[] = {(ll)1e9 + 2277, (ll)1e9 + 5277, (ll)1e9 + 8277, (ll)1e9 + 9277, (ll) 1e9 + 7 };
const ll NMOD = 1;
const int dx[] = {-1, 0, 1,0};
const int dy[] = {0, 1, 0, -1};
//**Variable**//
ll n, ans = 0 ;
ll arr[MAXN];
ll cnt[MAXN] ;
ll pref[MAXN] ;
ll dp[MAXN][2] ;
//**Struct**//
//**Function**//
template<class X, class Y >
bool minimize(X & x, const Y &y ) {
return x > y ? x = y, 1:0 ;
}
template<class X, class Y >
bool maximize(X &x, const Y &y ) {
return x < y ? x = y, 1:0 ;
}
ll power(ll a, ll b ) {
ll res = 1;
while(b) {
if(b & 1 ) res = a * res % M ;
b >>=1 ;
a = a * a % M ;
}
return res ;
}
ll sub(ll a, ll b) {
return ((a - b ) % M + M) % M ;
}
ll add(ll a, ll b ) {
return (a + b ) % M ;
}
ll mul(ll a, ll b ) {
return a * b % M ;
}
void init() {
ans =0 ;
cin>>n;
FOR(i,1, n) cin >> arr[i], cnt[arr[i]] ++ ;
}
void solve() { // goi dp[i][0./1] laf so cahc chon tap tu 0 -> i-1 co du hay thieu 1 so
dp[0][0] = 1 ;
FOR(i, 1, n + 1 ) dp[i][0] = ( mul( sub(power(2, cnt[i-1]), 1 ), dp[i-1][0] ) ) ;
FOR(i, 1, n + 1 ) {
dp[i][1] = mul(dp[i-1][1], sub(power(2, cnt[i -1 ] ), 1 )) ;
dp[i][1] = add(dp[i][1], dp[i-1][0 ]) ;
}
pref[0] = cnt[0] ;
FOR(i, 1, n + 1 ) pref[i] = pref[i-1] + cnt[i] ;
FOR(i, 0, n + 1 ) ans = add(ans, mul(mul(dp[i][1], i), power(2, n - pref[i])) ) ;
cout << sub(ans , 1 ) << el ;
}
void reset() {
FOR(i, 0, n + 1) dp[i][0] = dp[i][1] = cnt[i] = pref[i] = 0 ;
}
__ROOT__ {
// freopen(NAME".inp" , "r" , stdin);
// freopen(NAME".out" , "w", stdout) ;
fast;
int t = 1;
cin >> t ;
while(t--) {
init();
solve();
reset() ;
}
return (0&0);
}
Ly8gUk9PVCA6IERSQUdPTjMwMTIwMDkKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vbS4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uYS5uei9maWxlL3ZKc1JVYllZI0I5Ny1MRm5wRkowUVRzZHpJOGZFLVZkWVMyTkZCeU1OaklxWWVFM05BYTgKI2RlZmluZSBsZCBsb25nIGRvdWJsZQojZGVmaW5lIGVsICJcbiIKI2RlZmluZSBmYXN0IGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwojZGVmaW5lIF9fUk9PVF9fIGludCBtYWluKCkKI3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk8yIikKLy8jcHJhZ21hIEdDQyBvcHRpbWl6ZSgidW5yb2xsLWxvb3BzIikKLy8jcHJhZ21hIEdDQyB0YXJnZXQoImF2eDIsYm1pLGJtaTIscG9wY250LGx6Y250IikKI2RlZmluZSBGT1IoaSxsLHIpIGZvcihpbnQgaSA9IGwgOyBpIDw9IHIgOyBpICsrKQojZGVmaW5lIEZPUkQoaSxyLGwpIGZvcihpbnQgaSA9IHIgOyBpID49IGwgOyBpIC0tKQojZGVmaW5lIFJFUChpLCBhICkgZm9yKGludCBpID0gMCA7IGkgPCBhIDsgaSArKyApCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBNIDk5ODI0NDM1MwojZGVmaW5lIE1BWE4gMTAwMDAwMQojZGVmaW5lIElORiAoMWxsPDwzMCkgIC8vIGh0dHBzOi8vYy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4ucy5jb20vZ3JvdXAvcnBFaEt0Q2IzUS9jb250ZXN0LzYyNjQ1Mi9wcm9ibGVtL0QKI2RlZmluZSBCTE9DS19TSVpFIDQyNQojZGVmaW5lIE1BWF9OT0RFIDEwMDEwMDEKI2RlZmluZSBMT0cgMTkKI2RlZmluZSBBTFBIQV9TSVpFIDI2CiNkZWZpbmUgQkFTRSAyNTYKI2RlZmluZSBOQU1FICJmaWxlIgojZGVmaW5lIGNvbXBhcmUodikgc29ydCgodikuYmVnaW4oKSwgKHYpLmVuZCgpKTsgKHYpLmVyYXNlKHVuaXF1ZSgodikuYmVnaW4oKSwgKHYpLmVuZCgpKSwgKHYpLmVuZCgpKTsKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdXNpbmcgbmFtZXNwYWNlIGNocm9ubyA7CmNvbnN0IGxsIE1PRFtdID0geyhsbCkxZTkgKyAyMjc3LCAobGwpMWU5ICsgNTI3NywgKGxsKTFlOSArIDgyNzcsIChsbCkxZTkgKyA5Mjc3LCAobGwpIDFlOSArIDcgfTsKY29uc3QgbGwgTk1PRCA9IDE7CmNvbnN0IGludCBkeFtdID0gey0xLCAwLCAxLDB9Owpjb25zdCBpbnQgZHlbXSA9IHswLCAxLCAwLCAtMX07Ci8vKipWYXJpYWJsZSoqLy8KbGwgbiwgYW5zID0gMCA7CmxsIGFycltNQVhOXTsKbGwgY250W01BWE5dIDsKbGwgcHJlZltNQVhOXSA7CmxsIGRwW01BWE5dWzJdIDsKLy8qKlN0cnVjdCoqLy8KCi8vKipGdW5jdGlvbioqLy8KdGVtcGxhdGU8Y2xhc3MgWCwgY2xhc3MgWSA+CmJvb2wgbWluaW1pemUoWCAmIHgsIGNvbnN0IFkgJnkgKSB7CiAgICByZXR1cm4geCA+IHkgPyB4ID0geSwgMTowIDsKfQp0ZW1wbGF0ZTxjbGFzcyBYLCBjbGFzcyBZID4KYm9vbCBtYXhpbWl6ZShYICZ4LCBjb25zdCBZICZ5ICkgewogICAgcmV0dXJuIHggPCB5ID8geCA9IHksIDE6MCA7Cn0KbGwgcG93ZXIobGwgYSwgbGwgYiApIHsKICAgIGxsIHJlcyA9IDE7CiAgICB3aGlsZShiKSB7CiAgICAgICAgaWYoYiAmIDEgKSByZXMgPSBhICogcmVzICUgTSA7CiAgICAgICAgYiA+Pj0xIDsKICAgICAgICBhID0gYSAqIGEgJSBNIDsKICAgIH0KICAgIHJldHVybiByZXMgOwp9CmxsIHN1YihsbCBhLCBsbCBiKSB7CiAgICByZXR1cm4gKChhIC0gYiApICUgTSArIE0pICUgTSAgICA7Cn0KbGwgYWRkKGxsIGEsIGxsIGIgKSB7CiAgICByZXR1cm4gKGEgKyBiICkgJSBNICA7Cn0KbGwgbXVsKGxsIGEsIGxsIGIgKSB7CiAgICByZXR1cm4gYSAqIGIgJSBNIDsKfQp2b2lkIGluaXQoKSB7CiAgICBhbnMgPTAgIDsKICAgIGNpbj4+bjsKICAgIEZPUihpLDEsIG4pIGNpbiA+PiBhcnJbaV0sIGNudFthcnJbaV1dICsrIDsKfQoKdm9pZCBzb2x2ZSgpIHsgLy8gZ29pIGRwW2ldWzAuLzFdIGxhZiBzbyBjYWhjIGNob24gdGFwIHR1IDAgLT4gaS0xIGNvIGR1IGhheSB0aGlldSAxIHNvCiAgICBkcFswXVswXSA9IDEgOwogICAgRk9SKGksIDEsIG4gKyAxICkgZHBbaV1bMF0gPSAoIG11bCggc3ViKHBvd2VyKDIsIGNudFtpLTFdKSwgMSApLCBkcFtpLTFdWzBdICkgKSA7CiAgICBGT1IoaSwgMSwgIG4gKyAxICkgewogICAgICAgIGRwW2ldWzFdID0gbXVsKGRwW2ktMV1bMV0sIHN1Yihwb3dlcigyLCBjbnRbaSAtMSBdICksIDEgKSkgOwogICAgICAgIGRwW2ldWzFdID0gYWRkKGRwW2ldWzFdLCBkcFtpLTFdWzAgXSkgOwogICAgfQogICAgcHJlZlswXSA9IGNudFswXSA7CiAgICBGT1IoaSwgMSwgbiArIDEgICkgcHJlZltpXSA9IHByZWZbaS0xXSArIGNudFtpXSA7CiAgICBGT1IoaSwgMCwgbiArIDEgKSAgYW5zID0gYWRkKGFucywgbXVsKG11bChkcFtpXVsxXSwgaSksIHBvd2VyKDIsIG4gLSBwcmVmW2ldKSkgICkgOwogICAgY291dCA8PCBzdWIoYW5zICwgMSApICA8PCBlbCAgOwp9CnZvaWQgcmVzZXQoKSB7CiAgICBGT1IoaSwgMCwgbiArIDEpIGRwW2ldWzBdID0gZHBbaV1bMV0gPSBjbnRbaV0gPSBwcmVmW2ldID0gMCA7Cn0KX19ST09UX18gewogICAgLy8gZnJlb3BlbihOQU1FIi5pbnAiICwgInIiICwgc3RkaW4pOwogICAgLy8gZnJlb3BlbihOQU1FIi5vdXQiICwgInciLCBzdGRvdXQpIDsKICAgIGZhc3Q7CiAgICBpbnQgdCA9IDE7CiAgICBjaW4gPj4gdCA7CiAgICB3aGlsZSh0LS0pIHsKICAgICAgICBpbml0KCk7CiAgICAgICAgc29sdmUoKTsKICAgICAgICByZXNldCgpIDsKICAgIH0KICAgIHJldHVybiAoMCYwKTsKfQoKCgo=