#pragma GCC optimize(3, "Ofast", "inline")

#include <bits/stdc++.h>

#define start ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll long long
#define ull unsigned long long
#define int ll
#define ls st<<1
#define rs st<<1|1
#define pii pair<int,int>
#define rep(z, x, y) for(int z=x;z<=y;++z)
#define repd(z, x, y) for(int z=x;z>=y;--z)
#define com bool operator<(const node &b)const
using namespace std;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
const int maxn = (ll) 1e6 + 5;
const int mod = 998244353;
const int inf = 0x3f3f3f3f;
int T = 1;
int a[maxn];
int sum[maxn], sumt[maxn];
int n;
int ans = 0;

void fun(int l, int r, int val) {
    if (l > r)
        return;
    sum[l - 1] = 0;
    int len = r - l + 1;
    sumt[l] = sumt[l - 1] = 0;
    rep(i, l, r)sum[i - l + 1] = sum[i - l + 1 - 1] + a[i];
    rep(i, l + 1, r)sumt[i] = sumt[i - 2] + a[i] - a[i - 1];
    for (int i = 1; i <= len; ++i) {
        if (r == n - 1 && l == 2 && i == len)
            return;
        if ((len - i) % 2 == 0) {
            int lt = (r == n) ? 1 : 0, rt = (len - i) / 2, now = -1;
            if (r == n - 1)
                lt = 1;
            while (lt <= rt) {
                int mid = (lt + rt) / 2;
                int num = mid * 2;
                int t = sum[i] - (sum[r - l + 1] - sum[r - num - l + 1]) + sumt[r - num] - sumt[i + l - 1] + val;
//                if (i == 1 && l == 2 && r == 4)
//                    cout << t << ' ' << sum[i] << ' ' << (sum[r - l] - sum[r - num - l]) << ' '
//                         << sumt[r - num] - sumt[i + l - 1] << '@' << r - num << ' ' << i + l - 1 << '#' << val << endl;
                if (t < 0)
                    rt = mid - 1, now = mid;
                else
                    lt = mid + 1;
            }
            if (now == -1)
                continue;
            ans = (ans + (len - i) / 2 - now + 1) % mod;
//            cout << i << '#' << l << ' ' << r << ' ' << now << ' ' << (len - i) / 2 - now + 1 << ' ' << lt << ' ' << rt
//                 << endl;
        } else {
            int lt = 0, rt = (len - i) / 2, now = -1;
            while (lt <= rt) {
                int mid = (lt + rt) / 2;
                int num = mid * 2 + 1;
                int t = sum[i] - (sum[r - l + 1] - sum[r - num - l + 1]) + sumt[r - num] - sumt[i + l - 1] + val;

                if (t < 0)
                    rt = mid - 1, now = mid;
                else
                    lt = mid + 1;
            }
            if (now == -1)
                continue;
            ans = (ans + (len - i) / 2 - now + 1) % mod;
//            cout << i << ' ' << l << ' ' << r << ' ' << now << ' ' << (len - i) / 2 - now + 1 << ' ' << lt << ' ' << rt
//                 << endl;
        }
    }
}

void solve() {
    cin >> n;
    ans = 0;
    rep(i, 1, n)cin >> a[i];
    fun(1, n, 0);
    fun(1, n - 1, a[n]);
    fun(2, n, -a[1]);
    fun(2, n - 1, a[n] - a[1]);
    rep(i, 1, n)sum[i] = sum[i - 1] + a[i];
//    cout<<ans<<endl;
    for (int i = 1; i <= n; ++i) {
        if (sum[n] - sum[i] - sum[i] < 0) {
            cout << (ans + n - i + 1) % mod << '\n';
            return;
        }
    }
}

signed main() {
    start;
    cin >> T;
    while (T--)
        solve();
    return 0;
}