#include<bits/stdc++.h>
using namespace std;
int mod=998244353;
long long findPower(long long x,int y){
x=x%mod;
long long res=1;
while(y>0){
if(y&1)
res=(res*x)%mod;
y=y>>1;
x=(x*x)%mod;
}
return res;
}
int main(){
int t,i,a;
cin>>t;
while(t--){
int n;
cin>>n;
int arr[n+1];
for(i=0;i<n;i++)
cin>>arr[i];
sort(arr,arr+n);
long long ans=0;
if(arr[0]>1){
ans=findPower(2,n);
cout<<ans<<endl;
continue;
}
else if(arr[0]==arr[n-1]){
ans=(((findPower(2,n)-1)*2)%mod+1)%mod;
cout<<ans<<endl;
continue;
}
vector<pair<int,int> > v;
int current=1;
int size=0;
for(i=0;i<n;a++){
size=0;
while(i<n&&arr[i]==current){
size++;
i++;
}
v.push_back(make_pair(current,size));
current=arr[i];
}
int remSize=n,ending=0;
bool flag=true;
for(i=1;i<v.size();i++){
if((v[i].first-v[i-1].first)!=1){
flag=false;
break;
}
}
if(!flag)
ending=i-1;
else
ending=v.size()-1;
v.push_back(make_pair(0,0));
ans=findPower(2,n-v[0].second);
long long oldComer=1,newComer,here,finaly;
for(i=0;i<ending;i++){
remSize=remSize-v[i].second;
newComer=(((findPower(2,v[i].second)-1+mod)%mod)*(oldComer%mod))%mod;
here=(newComer*findPower(2,(remSize-v[i+1].second)))%mod;
ans=(ans+(here*(v[i].first+1))%mod)%mod;
oldComer=newComer;
finaly=remSize-v[i+1].second;
}
if(!flag){
newComer=(((findPower(2,v[i].second)-1+mod)%mod)*(oldComer%mod))%mod;
here=(newComer*findPower(2,finaly))%mod;
ans=(ans+(here*(v[i].first+1))%mod)%mod;
}
else{
remSize=remSize-v[i].second;
newComer=(((findPower(2,v[i].second)-1+mod)%mod)*(oldComer%mod))%mod;
here=(newComer*findPower(2,(remSize-v[i+1].second)))%mod;
ans=(ans+(here*(v[i].first+1))%mod)%mod;
oldComer=newComer;
}
cout<<ans<<endl;
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IG1vZD05OTgyNDQzNTM7CmxvbmcgbG9uZyBmaW5kUG93ZXIobG9uZyBsb25nIHgsaW50IHkpewp4PXglbW9kOwpsb25nIGxvbmcgcmVzPTE7CndoaWxlKHk+MCl7CiAgICBpZih5JjEpCiAgICAgICAgcmVzPShyZXMqeCklbW9kOwogICAgeT15Pj4xOwogICAgeD0oeCp4KSVtb2Q7Cn0KcmV0dXJuIHJlczsKfQppbnQgbWFpbigpewppbnQgdCxpLGE7CmNpbj4+dDsKd2hpbGUodC0tKXsKICAgIGludCBuOwogICAgY2luPj5uOwogICAgaW50IGFycltuKzFdOwogICAgZm9yKGk9MDtpPG47aSsrKQogICAgICAgIGNpbj4+YXJyW2ldOwogICAgc29ydChhcnIsYXJyK24pOwogICAgbG9uZyBsb25nIGFucz0wOwogICAgaWYoYXJyWzBdPjEpewogICAgICAgIGFucz1maW5kUG93ZXIoMixuKTsKICAgICAgICBjb3V0PDxhbnM8PGVuZGw7CiAgICAgICAgY29udGludWU7CiAgICB9CiAgICBlbHNlIGlmKGFyclswXT09YXJyW24tMV0pewogICAgICAgIGFucz0oKChmaW5kUG93ZXIoMixuKS0xKSoyKSVtb2QrMSklbW9kOwogICAgICAgIGNvdXQ8PGFuczw8ZW5kbDsKICAgICAgICBjb250aW51ZTsKICAgIH0KICAgIHZlY3RvcjxwYWlyPGludCxpbnQ+ID4gdjsKICAgIGludCBjdXJyZW50PTE7CiAgICBpbnQgc2l6ZT0wOwogICAgZm9yKGk9MDtpPG47YSsrKXsKICAgICAgICBzaXplPTA7CiAgICAgICAgd2hpbGUoaTxuJiZhcnJbaV09PWN1cnJlbnQpewogICAgICAgICAgICBzaXplKys7CiAgICAgICAgICAgIGkrKzsKICAgICAgICB9CiAgICAgICAgdi5wdXNoX2JhY2sobWFrZV9wYWlyKGN1cnJlbnQsc2l6ZSkpOwogICAgICAgIGN1cnJlbnQ9YXJyW2ldOwogICAgfQogICAgaW50IHJlbVNpemU9bixlbmRpbmc9MDsKICAgIGJvb2wgZmxhZz10cnVlOwogICAgZm9yKGk9MTtpPHYuc2l6ZSgpO2krKyl7CiAgICAgICAgaWYoKHZbaV0uZmlyc3QtdltpLTFdLmZpcnN0KSE9MSl7CiAgICAgICAgICAgIGZsYWc9ZmFsc2U7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIGlmKCFmbGFnKQogICAgICAgIGVuZGluZz1pLTE7CiAgICBlbHNlCiAgICAgICAgZW5kaW5nPXYuc2l6ZSgpLTE7CiAgICB2LnB1c2hfYmFjayhtYWtlX3BhaXIoMCwwKSk7CiAgICBhbnM9ZmluZFBvd2VyKDIsbi12WzBdLnNlY29uZCk7CiAgICBsb25nIGxvbmcgb2xkQ29tZXI9MSxuZXdDb21lcixoZXJlLGZpbmFseTsKICAgIGZvcihpPTA7aTxlbmRpbmc7aSsrKXsKICAgICAgICByZW1TaXplPXJlbVNpemUtdltpXS5zZWNvbmQ7CiAgICAgICAgbmV3Q29tZXI9KCgoZmluZFBvd2VyKDIsdltpXS5zZWNvbmQpLTErbW9kKSVtb2QpKihvbGRDb21lciVtb2QpKSVtb2Q7CiAgICAgICAgaGVyZT0obmV3Q29tZXIqZmluZFBvd2VyKDIsKHJlbVNpemUtdltpKzFdLnNlY29uZCkpKSVtb2Q7CiAgICAgICAgYW5zPShhbnMrKGhlcmUqKHZbaV0uZmlyc3QrMSkpJW1vZCklbW9kOwogICAgICAgIG9sZENvbWVyPW5ld0NvbWVyOwogICAgICAgIGZpbmFseT1yZW1TaXplLXZbaSsxXS5zZWNvbmQ7CiAgICB9CiAgICBpZighZmxhZyl7CiAgICAgICAgIG5ld0NvbWVyPSgoKGZpbmRQb3dlcigyLHZbaV0uc2Vjb25kKS0xK21vZCklbW9kKSoob2xkQ29tZXIlbW9kKSklbW9kOwogICAgICAgICBoZXJlPShuZXdDb21lcipmaW5kUG93ZXIoMixmaW5hbHkpKSVtb2Q7CiAgICAgICAgIGFucz0oYW5zKyhoZXJlKih2W2ldLmZpcnN0KzEpKSVtb2QpJW1vZDsKICAgIH0KICAgIGVsc2V7CiAgICAgICAgcmVtU2l6ZT1yZW1TaXplLXZbaV0uc2Vjb25kOwogICAgICAgIG5ld0NvbWVyPSgoKGZpbmRQb3dlcigyLHZbaV0uc2Vjb25kKS0xK21vZCklbW9kKSoob2xkQ29tZXIlbW9kKSklbW9kOwogICAgICAgIGhlcmU9KG5ld0NvbWVyKmZpbmRQb3dlcigyLChyZW1TaXplLXZbaSsxXS5zZWNvbmQpKSklbW9kOwogICAgICAgIGFucz0oYW5zKyhoZXJlKih2W2ldLmZpcnN0KzEpKSVtb2QpJW1vZDsKICAgICAgICBvbGRDb21lcj1uZXdDb21lcjsKICAgIH0KICAgIGNvdXQ8PGFuczw8ZW5kbDsKfQp9Cg==