#include <iostream>
#include<bits/stdc++.h>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <utility>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include<algorithm>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define IOF ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
#define ll long long
#define ld long double
#define cy cout << "YES" << '\n';
#define cn cout << "NO" << '\n';
using namespace std;
using namespace __gnu_pbds;
template<class T> using ordered_multiset = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;
template<typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
int dx[] = {1, 0, -1, 0, -1, -1, 1, 1};
int dy[] = {0, -1, 0, 1, -1, 1, -1, 1};
int knightX[] = {-2, -2, 2, 2, 1, 1 , -1, -1};
int knighty[] = {-1, 1, -1, 1, -2, 2, -2, 2};
char di[] = {'D', 'L', 'U', 'R'};
const int N =3e5+5;
const ll MOD = 998244353;
void FOI(){
freopen("input.txt", "r" , stdin);
freopen("output.txt", "w" , stdout);
}
//check ur idea
ll fast_power(ll x, ll p, ll m) {
if (p == 0) return 1;
if (p % 2 != 0)
return (x * fast_power(x, p - 1, m)) % m;
ll t = fast_power(x, p / 2, m);
return (t * t) % m;
}
ll modInv(ll a, ll m) {
return fast_power(a, m - 2, m);
}
void solve(){
int n ;cin >> n;
ll arr[n];
for(int i = 0 ; i < n ; i++)cin >> arr[i];
ll cnt1 = 0 , cnt2 = 0 , tmp = 0;
ll ans = 0;
for (int i = 0; i < n; i++){
if(arr[i] == 1){
cnt1++;
tmp = (tmp%MOD + modInv(fast_power(2 , cnt2 , MOD), MOD)%MOD) % MOD;
}
else if(arr[i] == 2){
cnt2++;
}
else{
ans = (ans%MOD +((fast_power(2 , cnt2 , MOD) * tmp) % MOD - cnt1 + MOD) % MOD) % MOD;
}
}
cout << ans << "\n";
}
int main() {
IOF
ll t = 1;
cin >> t;
while (t--) {
solve() ;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RhY2s+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPGRlcXVlPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CiNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgojaW5jbHVkZTxhbGdvcml0aG0+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CiNkZWZpbmUgSU9GIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKSwgY2luLnRpZShudWxscHRyKSwgY291dC50aWUobnVsbHB0cik7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBjeSBjb3V0IDw8ICJZRVMiIDw8ICdcbic7CiNkZWZpbmUgY24gY291dCA8PCAiTk8iIDw8ICdcbic7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOwoKdGVtcGxhdGU8Y2xhc3MgVD4gdXNpbmcgb3JkZXJlZF9tdWx0aXNldCA9IHRyZWU8VCwgbnVsbF90eXBlLCBsZXNzX2VxdWFsPFQ+LCByYl90cmVlX3RhZywgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPjsKdGVtcGxhdGU8dHlwZW5hbWUgVD4KdXNpbmcgb3JkZXJlZF9zZXQgPSB0cmVlPFQsIG51bGxfdHlwZSwgbGVzczxUPiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT47CgppbnQgZHhbXSA9IHsxLCAwLCAtMSwgMCwgLTEsIC0xLCAxLCAxfTsKaW50IGR5W10gPSB7MCwgLTEsIDAsIDEsIC0xLCAxLCAtMSwgMX07CmludCBrbmlnaHRYW10gPSB7LTIsIC0yLCAyLCAyLCAxLCAxICwgLTEsIC0xfTsKaW50IGtuaWdodHlbXSA9IHstMSwgMSwgLTEsIDEsIC0yLCAyLCAtMiwgMn07CmNoYXIgZGlbXSA9IHsnRCcsICdMJywgJ1UnLCAnUid9Owpjb25zdCBpbnQgTiA9M2U1KzU7CmNvbnN0IGxsIE1PRCA9IDk5ODI0NDM1MzsKdm9pZCBGT0koKXsKICAgIGZyZW9wZW4oImlucHV0LnR4dCIsICJyIiAsIHN0ZGluKTsKICAgIGZyZW9wZW4oIm91dHB1dC50eHQiLCAidyIgLCBzdGRvdXQpOwp9CgovL2NoZWNrIHVyIGlkZWEKCmxsIGZhc3RfcG93ZXIobGwgeCwgbGwgcCwgbGwgbSkgewogICAgaWYgKHAgPT0gMCkgcmV0dXJuIDE7CiAgICBpZiAocCAlIDIgIT0gMCkKICAgICAgICByZXR1cm4gKHggKiBmYXN0X3Bvd2VyKHgsIHAgLSAxLCBtKSkgJSBtOwogICAgbGwgdCA9IGZhc3RfcG93ZXIoeCwgcCAvIDIsIG0pOwogICAgcmV0dXJuICh0ICogdCkgJSBtOwp9CmxsIG1vZEludihsbCBhLCBsbCBtKSB7CiAgICByZXR1cm4gZmFzdF9wb3dlcihhLCBtIC0gMiwgbSk7Cn0KCnZvaWQgc29sdmUoKXsKaW50IG4gO2NpbiA+PiBuOwpsbCBhcnJbbl07CmZvcihpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKyljaW4gPj4gYXJyW2ldOwpsbCBjbnQxID0gMCAsIGNudDIgPSAwICwgdG1wID0gMDsKbGwgYW5zID0gMDsKZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspewogICAgaWYoYXJyW2ldID09IDEpewogICAgY250MSsrOwogICAgdG1wID0gKHRtcCVNT0QgKyBtb2RJbnYoZmFzdF9wb3dlcigyICwgY250MiAsIE1PRCksIE1PRCklTU9EKSAlIE1PRDsKICAgIH0KICAgIGVsc2UgaWYoYXJyW2ldID09IDIpewogICAgY250MisrOwogICAgfSAKICAgIGVsc2V7CiAgICBhbnMgPSAoYW5zJU1PRCArKChmYXN0X3Bvd2VyKDIgLCBjbnQyICwgTU9EKSAqIHRtcCkgJSBNT0QgLSBjbnQxICsgTU9EKSAlIE1PRCkgJSBNT0Q7CiAgICB9Cn0KICAgIAogICAgY291dCA8PCBhbnMgPDwgIlxuIjsKCn0KCgoKCmludCBtYWluKCkgewogCgogICAgSU9GCiAgICBsbCB0ID0gMTsKICAgIGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkgewogICAgc29sdmUoKSA7CgogICAgfQogCiAgICByZXR1cm4gMDsKfQ==