← Home
package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

func gcd(a, b int) int {
	for b != 0 {
		a, b = b, a%b
	}
	return a
}

func check(a []int, skip int) bool {
	prevGcd := -1
	var prevVal int
	first := true

	for i := 0; i < len(a); i++ {
		if i == skip {
			continue
		}
		if first {
			prevVal = a[i]
			first = false
		} else {
			currGcd := gcd(prevVal, a[i])
			if prevGcd != -1 && currGcd < prevGcd {
				return false
			}
			prevGcd = currGcd
			prevVal = a[i]
		}
	}
	return true
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	buf := make([]byte, 1024*1024)
	scanner.Buffer(buf, 10*1024*1024)

	nextInt := func() int {
		scanner.Scan()
		res, _ := strconv.Atoi(scanner.Text())
		return res
	}

	if !scanner.Scan() {
		return
	}
	t, _ := strconv.Atoi(scanner.Text())

	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	for tc := 0; tc < t; tc++ {
		n := nextInt()

		a := make([]int, n)
		for i := 0; i < n; i++ {
			a[i] = nextInt()
		}

		b := make([]int, n-1)
		for i := 0; i < n-1; i++ {
			b[i] = gcd(a[i], a[i+1])
		}

		violation := -1
		for i := 0; i < n-2; i++ {
			if b[i] > b[i+1] {
				violation = i
				break
			}
		}

		if violation == -1 {
			fmt.Fprintln(writer, "YES")
		} else {
			ans := false
			for k := violation; k <= violation+2; k++ {
				if k < n && check(a, k) {
					ans = true
					break
				}
			}
			if ans {
				fmt.Fprintln(writer, "YES")
			} else {
				fmt.Fprintln(writer, "NO")
			}
		}
	}
}