#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ri register int
using namespace std;
typedef long long ll;
const int N=200010;
const ll M=998244353;
int T,n;
ll x,a,b,c,d,fu[N],fl[N],f[N][3]; //fu最大值,fl最小值,f方案数
void cal(int k,int b,ll x){f[k][b]=(f[k][b]+x)%M;}
void solve()
{
scanf("%d",&n); fu[0]=fl[0]=0,f[0][1]=f[0][0]=1;
for(ri i=1;i<=n;i++)
{
scanf("%lld",&x);
a=fu[i-1]+x,b=fl[i-1]+x,c=llabs(fu[i-1]+x),d=llabs(fl[i-1]+x);
fu[i]=max(max(a,b),max(c,d));
fl[i]=min(min(a,b),min(c,d));
f[i][1]=f[i][0]=0;
if(fu[i]==a) cal(i,1,f[i-1][1]);
if(fu[i]==b) cal(i,1,f[i-1][0]);
if(fu[i]==c) cal(i,1,f[i-1][1]);
if(fu[i]==d) cal(i,1,f[i-1][0]);
if(fl[i]==a) cal(i,0,f[i-1][1]);
if(fl[i]==b) cal(i,0,f[i-1][0]);
if(fl[i]==c) cal(i,0,f[i-1][1]);
if(fl[i]==d) cal(i,0,f[i-1][0]);
if(fu[i-1]==fl[i-1]&&f[i-1][1]==f[i-1][0]) f[i][1]/=2,f[i][0]/=2;
}
printf("%lld\n",f[n][1]);
}
int main()
{
scanf("%d",&T);
while(T--) solve();
return 0;
}
改的和题解一样了都,还是WA