#include <bits/stdc++.h>      #define ed end()   #define bg begin()   #define mp make_pair   #define pb push_back   #define vv(T) v(v(T))   #define v(T) vector<T>   #define all(x) x.bg,x.ed   #define newline puts(  )   #define si(x) ((int)x.size())   #define rep(i,n) for(int i=1;i<=n;++i)   #define rrep(i,n) for(int i=0;i<n;++i)   #define srep(i,s,t) for(int i=s;i<=t;++i)   #define drep(i,s,t) for(int i=t;i>=s;--i)      #define DEBUG   #define d1(x) std::cout << #x   =   << (x) << std::endl   #define d2(x, y) std::cout << #x   =   << (x) <<   ,  #y   =   << (y) << std::endl   #define disp(arry, fr, to)        {            std::cout << #arry   :  ;            for(int _i = fr; _i <= to; _i++) std::cout << arry[_i] <<    ;            std::cout << std::endl;        }      using namespace std;   typedef long long ll;   typedef pair<int,int> pii;   const int Maxn = 2e5+10;   const int Inf = 0x7f7f7f7f;   const ll Inf_ll = 1ll*Inf*Inf;   const int Mod = 1e9+7;   const double eps = 1e-7;      int n, a[Maxn], tol;   ll Sum, sum[Maxn], s[Maxn];      int calc(int l, int r, ll x){       // if( l > r )  return 0;       int ll = l, rr = r, ans = l-1;       while( ll <= rr )       {           int mid = (ll+rr) >> 1;           if( s[mid] - s[l-1] <= x )  ll = mid+1, ans = mid;           else rr = mid-1;       }       // printf( l = %d, r = %d, x = %lld, ans = %d n , l, r, x, ans-l+1 + (x>=0));       return ans-l+1 + (x>=0);   }      ll work(){       tol = 0;       ll ans = 0, las = 0;       for(int i=1;i<=n;i+=2)       {              s[++tol] = las + a[i];           las += a[i];       }       for(int i=1,j=1;i<=n;i+=2,j++)       {           if( n&1 )           {               ll tmp = (Sum-1)/2 - sum[i];               ans += calc(j+1, tol-1, tmp);               if( i+1 < n )                   ans += calc(j+1, tol-1, tmp-a[n]);               if( i != 1 )               {                   ans += calc(j+1, tol-1, tmp+a[1]);                   if( i+1 < n )                       ans += calc(j+1, tol-1, tmp-a[n]+a[1]);               }           }           else            {               ll tmp = (Sum-1)/2 - sum[i];               ans += calc(j+1, tol, tmp);               if( i+1 < n )                   ans += calc(j+1, tol-1, tmp-a[n]);               if( i != 1 )               {                   ans += calc(j+1, tol, tmp+a[1]);                   if( i+1 < n )                       ans += calc(j+1, tol-1, tmp-a[n]+a[1]);               }           }           // d2(i, ans);       }       las = tol = 0;          for(int i=2;i<=n;i+=2)       {           s[++tol] = las + a[i];           las += a[i];       }       for(int i=2,j=1;i<=n;i+=2,j++)       {           if( n&1 )           {               ll tmp = (Sum-1)/2 - sum[i];               ans += calc(j+1, tol, tmp);               if( i+1 < n )                   ans += calc(j+1, tol-1, tmp-a[n]);               if( i != 1 )               {                   ans += calc(j+1, tol, tmp+a[1]);                   if( i+1 < n )                       ans += calc(j+1, tol-1, tmp-a[n]+a[1]);               }           }           else            {               ll tmp = (Sum-1)/2 - sum[i];               ans += calc(j+1, tol-1, tmp);               if( i+1 < n )                   ans += calc(j+1, tol-1, tmp-a[n]);               if( i != 1 )               {                   ans += calc(j+1, tol-1, tmp+a[1]);                   if( i+1 < n )                       ans += calc(j+1, tol-1, tmp-a[n]+a[1]);               }           }           // d2(i, ans);       }       las = 0;       for(int i=n;i>=3;i--)       {           las += a[i];           if( las*2 >= Sum )  break;           ans++;       }       return ans + 1;   }      void solve(){       scanf( %d ,&n);       Sum = 0;       for(int i=1;i<=n;i++)       {           scanf( %d ,&a[i]);           Sum += a[i];           sum[i] = sum[i-1] + a[i];       }       printf( %lld n , work()%998244353);   }         int main(){       int T;       scanf( %d ,&T);       for(int _=1;_<=T;_++)       {           solve();       }       return 0;   }