#include<bits/stdc++.h>
using namespace std;
#define size(v) (int)v.size()
#define all(v) (v).begin(),(v).end()
using lint = long long;
using fint = long double;
const int INF = 1e9 + 9;
const int MOD = 998244353;

int n, a[200000];

int solve(){
    int ret = 0;

    // pp...p cc...c
    lint psum = 0, sum = accumulate(a,a+n,0ll);
    for(int i=0;i<n;++i){
        psum += a[i];
        if(psum > sum - psum)
            ret++;
    }

    // cc...c pcpc...pc pp...p
    //      i         ^ (lower bonud)
    auto f = [&](vector<int> a,lint base){
        vector<lint> pa, ev, od;
        for(int i=0;i<size(a);++i) pa.push_back(a[i]);
        for(int i=0;i<size(a)-1;i+=2) ev.push_back(a[i]);
        for(int i=1;i<size(a)-1;i+=2) od.push_back(a[i]);
        for(int i=1;i<size(pa);++i) pa[i] += pa[i-1];
        for(int i=1;i<size(ev);++i) ev[i] += ev[i-1];
        for(int i=1;i<size(od);++i) od[i] += od[i-1];
        for(int i=0;i<size(a)-1;++i){
            vector<lint> &oe = (i&1 ? od : ev);
            lint dff = base + pa[size(a)-1] - pa[i] - pa[i];
            int cnt = lower_bound(all(oe), oe[i/2] + (dff+1)/2) - lower_bound(all(oe), oe[i/2]);
            if(dff > 0) ret = (ret + cnt) % MOD;
        }
    };

    // Case1: cc...c pcpc...pc pp...p
    if(1 < n) f(vector<int>(a,a+n), 0);
    // Case2: cc...c pcpc...pc pp...p(c)
    if(2 < n) f(vector<int>(a,a+n-1), -a[n-1]);
    // Case3: (p)ccc...c pcpc...pc pp...p
    if(2 < n) f(vector<int>(a+1,a+n), a[0]);
    // Case4: (p)ccc...c pcpc...pc pp...p(c)
    if(3 < n) f(vector<int>(a+1,a+n-1), a[0]-a[n-1]);

    return ret;

}

int main(){
    int tc; scanf("%d",&tc);
    while(tc--){
        scanf("%d",&n);
        for(int i=0;i<n;++i)
            scanf("%d",a+i);
        printf("%d\n",solve());
    }
}
