from collections import defaultdict from bisect import bisect_right class PrefixMax: def __init__(self, xs: list[tuple[int, int]]): # tuple[key, val] : key でソートし、prefix max を求める # key : 3 10 20 # val : 2 5 4 # prmax : 2 5 5 keys = [] vals = [] for k, v in sorted(xs): keys.append(k) vals.append(v) for i in range(1, len(vals)): vals[i] = max(vals[i], vals[i-1]) self.keys = keys self.vals = vals def le(self, p: int, default): """インデックス p 以下の prefix max を求める""" s = bisect_right(self.keys, p) if s == 0: return default return self.vals[s-1] def solve(): N = int(input()) A = list(map(int, input().split())) def f(xs: list[int]) -> list[int]: dp = [defaultdict(int) for _ in range(N)] prmaxes = [] res = [1] * N for i in range(N): for j in range(i+1): d = xs[i] - xs[j] if d <= 0: continue # xs[j], xs[i] の長さ 2 の数列からスタート dp[i][d] = max(dp[i][d], 2) # 前の結果から伸ばす # for pd, plen in dp[j].items(): # if pd < d: # dp[i][d] = max(dp[i][d], plen + 1) max_len = prmaxes[j].le(d-1, 0) dp[i][d] = max(dp[i][d], max_len + 1) res[i] = max(res[i], dp[i][d]) prmaxes.append(PrefixMax(list(dp[i].items()))) return res lefts = f(A) rights = f(A[::-1])[::-1] return max([a+b-1 for a, b in zip(lefts, rights)]) T = int(input()) for t in range(T): ans = solve() print(ans)