package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
if !scanner.Scan() {
return
}
t, _ := strconv.Atoi(scanner.Text())
f := make([]int64, 60)
sumF := make([]int64, 60)
f[0] = 1
f[1] = 1
sumF[0] = 1
sumF[1] = 2
for i := 2; i < 60; i++ {
f[i] = f[i-1] + f[i-2]
sumF[i] = sumF[i-1] + f[i]
}
for tc := 0; tc < t; tc++ {
scanner.Scan()
k, _ := strconv.Atoi(scanner.Text())
c := make([]int64, k)
var totalSum int64 = 0
for i := 0; i < k; i++ {
scanner.Scan()
val, _ := strconv.ParseInt(scanner.Text(), 10, 64)
c[i] = val
totalSum += val
}
m := -1
for i := 0; i < 60; i++ {
if sumF[i] == totalSum {
m = i
break
}
}
if m == -1 {
fmt.Println("NO")
continue
}
possible := true
lastIdx := -1
for j := m; j >= 0; j-- {
maxIdx := -1
var maxVal int64 = -1
for i := 0; i < k; i++ {
if i == lastIdx {
continue
}
if c[i] > maxVal {
maxVal = c[i]
maxIdx = i
}
}
if maxIdx == -1 || maxVal < f[j] {
possible = false
break
}
c[maxIdx] -= f[j]
lastIdx = maxIdx
}
if possible {
fmt.Println("YES")
} else {
fmt.Println("NO")
}
}
}