In the 2050 Conference, some people from the competitive programming community meet together and are going to take a photo. The n people form a line. They are numbered from 1 to n from left to right. Each of them either holds a cardboard with the letter 'C' or a cardboard with the letter 'P'.

Let C=\\{c_1,c_2,...,c_m\} (c_1<c_2<… <c_m) be the set of people who hold cardboards of 'C'. Let P=\\{p_1,p_2,...,p_k\} (p_1<p_2<… <p_k) be the set of people who hold cardboards of 'P'. The photo is good if and only if it satisfies the following constraints: 

  1. C∪ P=\{1,2,...,n\} 
  2. C∩ P =∅ . 
  3. c_i-c_{i-1}≤ c_{i+1}-c_i(1< i <m). 
  4. p_i-p_{i-1}≥ p_{i+1}-p_i(1< i <k). 



Given an array a_1,…, a_n, please find the number of good photos satisfying the following condition: $$$∑_{x∈ C} a_x < ∑_{y∈ P} a_y.$$$

The answer can be large, so output it modulo 998 244 353. Two photos are different if and only if there exists at least one person who holds a cardboard of 'C' in one photo but holds a cardboard of 'P' in the other.

Input

Each test contains multiple test cases. The first line contains the number of test cases t (1 ≤ t ≤ 200 000). Description of the test cases follows.

The first line of each test case contains a single integer n (1≤ n≤ 200 000).

The second line contains n integers a_1, a_2, …, a_n (1 ≤ a_i ≤ 10^9).

It is guaranteed that the sum of n over all test cases does not exceed 200 000.

Output

For each test case, output the answer modulo 998 244 353 in a separate line.

Example

Input


3
5
2 1 2 1 1
4
9 2 2 2
1
998244353


Output


10
7
1

Note

For the first test case, there are 10 possible good photos satisfying the condition: PPPPP, CPPPP, PCPPP, CCPPP, PCCPP, PCPCP, PPPPC, CPPPC, PCPPC, PPPCC.

For the second test case, there are 7 possible good photos satisfying the condition: PPPP, PCPP, PCCP, PPPC, PCPC, PPCC, PCCC.
#include<bits/stdc++.h>
using namespace std;
#define N 200020
const int mod=998244353;
typedef long long ll;
inline ll read(){
	ll x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=(x<<1)+(x<<3)+c-'0';
		c=getchar();
	}
	return x*f;
}
int T,n;
ll a[N],s1[N],s2[N],s0[N];
int calc(ll t,int z0,int z1){
	int tot=0;
	if(!(z0&&!z1)&&t+s0[n]>0)++tot;
	for(int i=1;i<=n-(!z1);++i){
		int l=1,r=i+2,now=0;
		while(l<r){
			int mid=(l+r)>>1;
			if(t+s0[n]-s0[i]-s0[i]+2*(i&1?s2[i]-s2[mid-1]:s1[i]-s1[mid-1])>0){
				now=mid,l=mid+1;	
			}
			else{
				r=mid;
			}
		}
		tot=(tot+(now+1)/2)%mod;
		if(now>=1&&z0&&!(i&1))tot=(tot+mod-1)%mod;
	}
	return tot;
}
int Solve(){
	n=read();
	ll x=read();
	if(n==1)return 1;
	n-=2;
	for(int i=1;i<=n;++i){
		a[i]=read();
	}
	ll y=read();
	for(int i=1;i<=n;++i){
		s0[i]=s0[i-1]+a[i];
		s1[i]=s1[i-1]+(i&1?a[i]:0);
		s2[i]=s2[i-1]+(i&1?0:a[i]);
	}
	int ans=(((calc(x-y,1,0)+calc(x+y,1,1))%mod+calc(-x+y,0,1))%mod+calc(-x-y,0,0))%mod;
	for(int i=0;i<=n;++i){
		if(s0[i]+x>s0[n]-s0[i]+y)ans=(ans+1)%mod;
	}
	return ans;
}
int main(){
	T=read();
	while(T--){
		printf("%d\n",Solve());
	}
	return 0;
}

