Pchelyonok decided to give Mila a gift. Pchelenok has already bought an array a of length n, but gifting an array is too common. Instead of that, he decided to gift Mila the segments of that array!

Pchelyonok wants his gift to be beautiful, so he decided to choose k non-overlapping segments of the array [l_1,r_1], [l_2,r_2], … [l_k,r_k] such that:

  * the length of the first segment [l_1,r_1] is k, the length of the second segment [l_2,r_2] is k-1, …, the length of the k-th segment [l_k,r_k] is 1 
  * for each i<j, the i-th segment occurs in the array earlier than the j-th (i.e. r_i<l_j) 
  * the sums in these segments are strictly increasing (i.e. let sum(l … r) = ∑_{i=l}^{r} a_i — the sum of numbers in the segment [l,r] of the array, then sum(l_1 … r_1) < sum(l_2 … r_2) < … < sum(l_k … r_k)). 



Pchelenok also wants his gift to be as beautiful as possible, so he asks you to find the maximal value of k such that he can give Mila a gift!

Input

The first line contains a single integer t (1 ≤ t ≤ 100) — the number of test cases. The next 2 ⋅ t lines contain the descriptions of test cases. The description of each test case consists of two lines.

The first line of each test case contains a single integer n (1 ≤ n ≤ 10^5) — the length of the array.

The second line contains n integers a_1, a_2, …, a_n (1 ≤ a_i ≤ 10^9) — the elements of the array a.

It is guaranteed that the sum of n over all test cases does not exceed 10^5.

Output

For each test case, print the maximum possible value of k.

Example

Input


5
1
1
3
1 2 3
5
1 1 2 2 3
7
1 2 1 1 3 2 6
5
9 6 7 9 7


Output


1
1
2
3
1
import java.io.*;
import java.util.*;

public class Main {
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static StringTokenizer st;
	static PrintWriter pr = new PrintWriter(System.out);
	static String readLine() throws IOException {
		return br.readLine();
	}
	static String next() throws IOException {
		while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(readLine());
		return st.nextToken();
	}
	static int readInt() throws IOException {
		return Integer.parseInt(next());
	}
	static long readLong() throws IOException {
		return Long.parseLong(next());
	}
	static double readDouble() throws IOException {
		return Double.parseDouble(next());
	}
	static char readChar() throws IOException {
		return next().charAt(0);
	}
	static class Pair implements Comparable<Pair> {
		int f, s;
		Pair(int f, int s) {
			this.f = f; this.s = s;
		}
		public int compareTo(Pair other) {
			if (this.f != other.f) return this.f - other.f;
			return this.s - other.s;
		}
	}
	final static long inf = (long)1e18;
	static int n, a[];
	static long psa[], dp[][];
	static boolean f(int k) {
		for (int i = 0; i <= n; ++i)
			Arrays.fill(dp[i], inf);
		dp[0][k + 1] = 0;
		for (int i = 1; i <= n; ++i) {
			int lim = Math.min(i, k);
			for (int j = 1; j <= lim; ++j) {
				long sum = psa[i] - psa[i - j];
				if (sum > dp[i - j][j + 1]) dp[i][j] = sum;
				dp[i][j] = Math.min(dp[i][j], Math.min(dp[i - 1][j], dp[i][j - 1]));
			}
		}
		return dp[n][1] != inf;
	}
	static void solve() throws IOException {
		n = readInt();
		a = new int[n + 1];
		psa = new long[n + 1];
		for (int i = 1; i <= n; ++i) {
			a[i] = readInt();
			psa[i] = psa[i - 1] + a[i];
		}
		int lo = 1, hi = (int)Math.sqrt(2*n);
		dp = new long[n + 1][hi + 2];
		while (lo < hi) {
			int mid = (lo + hi + 1)>>1;
			if (f(mid)) lo = mid;
			else hi = mid - 1;
		}
		pr.println(lo);
	}
	public static void main(String[] args) throws IOException {
		//solve();
		for (int t = readInt(); t > 0; --t) solve();
		pr.close();
	}
}
