#include <bits/stdc++.h>
#define ll unsigned long long
using namespace std;
const int N=1005;
int T,n;
inline ll read(){
ll ans=0;
char ch=0;
while(ch<'0'||ch>'9') ch=getchar();
while(ch>='0'&&ch<='9'){
ans*=10ll,ans+=(ll)(ch-'0');
ch=getchar();
}
return ans;
}
inline void print(ll a){
int d[15],p=0;
do d[++p]=a%10ll,a/=10ll;
while(a>0);
for(int i=p;i>=1;i--)
putchar(d[i]+'0');
}
ll mod=998244353ll,dp[N][N][2],d[N];
ll qpow(ll a,ll b){
if(a==0ll&&b==0ll) return 0ll;
if(b==0) return 1ll;
ll ans=qpow(a,b/2ll);
ans*=ans,ans%=mod;
if(b%2ll==1ll) ans*=a,ans%=mod;
return ans;
}
int main(){
T=read();
while(T--){
n=read();
for(int i=1;i<=n;i++)
d[i]=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
dp[i][j][0]=dp[i][j][1]=0ll;
for(int len=2,r;len<=n;len++)
for(int l=1;l+len-1<=n;l++){
r=len+l-1;
dp[l][r][0]=max(dp[l+1][r][0]+qpow(d[l],d[l+1]),dp[l+1][r][1]+qpow(d[l],d[r]));
dp[l][r][1]=max(dp[l][r-1][0]+qpow(d[r],d[l]),dp[l][r-1][1]+qpow(d[r],d[r-1]));
}
print(max(dp[1][n][0],dp[1][n][1]));
putchar('\n');
}
return 0;
}