← Home
package main

import (
	"io"
	"os"
	"strconv"
)

const INF = int(1e9)

func check(a, pref []int, n, x, y int) bool {
	cur := 0
	pref[0] = 0
	min0, min1 := INF, INF
	nextAdd := 0
	for i := 1; i <= n; i++ {
		ai := a[i]
		if ai < x {
			pref[i] = cur
			min0, min1 = INF, INF
			nextAdd = i
			continue
		}
		if ai >= y {
			cur++
		} else {
			cur--
		}
		pref[i] = cur
		if ai == x {
			for j := nextAdd; j < i; j++ {
				pj := pref[j]
				if j&1 == 0 {
					if pj < min0 {
						min0 = pj
					}
				} else {
					if pj < min1 {
						min1 = pj
					}
				}
			}
			nextAdd = i
		}
		if i&1 == 0 {
			if min0 <= cur || min1 <= cur-1 {
				return true
			}
		} else {
			if min1 <= cur || min0 <= cur-1 {
				return true
			}
		}
	}
	return false
}

func main() {
	data, _ := io.ReadAll(os.Stdin)
	idx := 0
	nextInt := func() int {
		for idx < len(data) && (data[idx] < '0' || data[idx] > '9') {
			idx++
		}
		val := 0
		for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
			val = val*10 + int(data[idx]-'0')
			idx++
		}
		return val
	}

	t := nextInt()
	out := make([]byte, 0, t*4)

	var a, pref []int

	for ; t > 0; t-- {
		n := nextInt()
		if cap(a) < n+1 {
			a = make([]int, n+1)
			pref = make([]int, n+1)
		} else {
			a = a[:n+1]
			pref = pref[:n+1]
		}

		var cnt [101]int
		maxVal := 0
		for i := 1; i <= n; i++ {
			v := nextInt()
			a[i] = v
			cnt[v]++
			if v > maxVal {
				maxVal = v
			}
		}

		ans := 0
		for x := 1; x < maxVal; x++ {
			if cnt[x] == 0 {
				continue
			}
			lo, hi := x, maxVal+1
			for lo+1 < hi {
				mid := (lo + hi) >> 1
				if check(a, pref, n, x, mid) {
					lo = mid
				} else {
					hi = mid
				}
			}
			if lo-x > ans {
				ans = lo - x
			}
		}

		out = strconv.AppendInt(out, int64(ans), 10)
		out = append(out, '\n')
	}

	os.Stdout.Write(out)
}