```go
package main
import (
"bufio"
"fmt"
"os"
)
func max(a, b int) int {
if a > b {
return a
}
return b
}
func min(a, b int) int {
if a < b {
return a
}
return b
}
func main() {
in := bufio.NewReader(os.Stdin)
var t int
fmt.Fscan(in, &t)
for tt := 0; tt < t; tt++ {
var n int
fmt.Fscan(in, &n)
a := make([]int64, n)
uniques := make(map[int64]bool)
for i := 0; i < n; i++ {
fmt.Fscan(in, &a[i])
uniques[a[i]] = true
}
var mex int64 = 0
for {
if _, ok := uniques[mex]; !ok {
break
}
mex++
}
m := mex
pos_m1 := []int{}
for i := 0; i < n; i++ {
if a[i] == m+1 {
pos_m1 = append(pos_m1, i)
}
}
empty_s := len(pos_m1) == 0
min_pos := make([]int, int(m))
max_pos := make([]int, int(m))
for i := range min_pos {
min_pos[i] = n
max_pos[i] = -1
}
low_count := 0
for i := 0; i < n; i++ {
if a[i] < m {
low_count++
x := int(a[i])
min_pos[x] = min(min_pos[x], i)
max_pos[x] = max(max_pos[x], i)
}
}
var ans string
if empty_s {
if low_count == n && low_count == int(m) {
ans = "No"
} else {
ans = "Yes"
}
} else {
L0 := n
R0 := -1
for _, p := range pos_m1 {
L0 = min(L0, p)
R0 = max(R0, p)
}
left_bound := 0
for x := 0; x < int(m); x++ {
if max_pos[x] <= R0 && max_pos[x] >= 0 {
left_bound = max(left_bound, min_pos[x]+1)
}
}
right_bound := n - 1
for x := 0; x < int(m); x++ {
if min_pos[x] >= L0 && min_pos[x] < n {
right_bound = min(right_bound, max_pos[x]-1)
}
}
if left_bound <= L0 && R0 <= right_bound {
ans = "Yes"
} else {
ans = "No"
}
}
fmt.Println(ans)
}
}
```