← Home
For problem statement at 1000-1999/1700-1799/1710-1719/1718/problemB.txt this is a correct solution, but verifier at 1000-1999/1700-1799/1710-1719/1718/verifierB.go ends with All 100 tests passed can you fix the verifier? ```go
package main

import (
	"bufio"
	"io"
	"os"
)

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

	const maxTotal int64 = 100000000000

	fib := []int64{1, 1}
	pref := []int64{1, 2}
	for pref[len(pref)-1] < maxTotal {
		nxt := fib[len(fib)-1] + fib[len(fib)-2]
		fib = append(fib, nxt)
		pref = append(pref, pref[len(pref)-1]+nxt)
	}

	maxInd := make([]int64, len(fib))
	for i := 0; i < len(fib); i++ {
		if i <= 1 {
			maxInd[i] = 1
		} else {
			a := maxInd[i-1]
			b := fib[i] + maxInd[i-2]
			if a > b {
				maxInd[i] = a
			} else {
				maxInd[i] = b
			}
		}
	}

	pos := make(map[int64]int, len(pref))
	for i, v := range pref {
		pos[v] = i
	}

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

	for ; t > 0; t-- {
		k := int(nextInt())
		rem := make([]int64, k)
		var sum int64
		for i := 0; i < k; i++ {
			rem[i] = nextInt()
			sum += rem[i]
		}

		m, ok := pos[sum]
		possible := ok

		if possible {
			prev := -1
			for n := m; n >= 0 && possible; n-- {
				limCur := maxInd[n]
				var limPrev int64
				if n > 0 {
					limPrev = maxInd[n-1]
				}

				if prev != -1 && rem[prev] > limPrev {
					possible = false
					break
				}

				forced := -1
				exact := -1

				for i := 0; i < k; i++ {
					if rem[i] > limCur {
						possible = false
						break
					}
					if i == prev {
						continue
					}
					if rem[i] > limPrev {
						if forced != -1 {
							possible = false
							break
						}
						forced = i
					} else if rem[i] == fib[n] {
						exact = i
					}
				}

				if !possible {
					break
				}

				chosen := -1
				if forced != -1 {
					chosen = forced
				} else if exact != -1 {
					chosen = exact
				} else {
					possible = false
					break
				}

				rem[chosen] -= fib[n]
				prev = chosen
			}

			if possible {
				for i := 0; i < k; i++ {
					if rem[i] != 0 {
						possible = false
						break
					}
				}
			}
		}

		if possible {
			out = append(out, 'Y', 'E', 'S', '\n')
		} else {
			out = append(out, 'N', 'O', '\n')
		}
	}

	w := bufio.NewWriterSize(os.Stdout, 1<<20)
	w.Write(out)
	w.Flush()
}
```