← Home
For problem statement at 0-999/200-299/270-279/279/problemD.txt this is a correct solution, but verifier at 0-999/200-299/270-279/279/verifierD.go ends with All tests passed can you fix the verifier? ```go
package main

import (
	"bufio"
	"fmt"
	"math/bits"
	"os"
)

type Pair struct {
	j, l int
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n int
	if _, err := fmt.Fscan(reader, &n); err != nil {
		return
	}

	a := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(reader, &a[i])
	}

	if n == 1 {
		fmt.Println(1)
		return
	}

	pairs := make([][]Pair, n)
	for k := 1; k < n; k++ {
		for j := 0; j < k; j++ {
			for l := j; l < k; l++ {
				if a[j]+a[l] == a[k] {
					pairs[k] = append(pairs[k], Pair{j, l})
				}
			}
		}
		if len(pairs[k]) == 0 {
			fmt.Println("-1")
			return
		}
	}

	memo := make([]int8, 1<<(n+1))

	var solve func(k int, mask int) int8
	solve = func(k int, mask int) int8 {
		if k == 0 {
			return 1
		}

		idx := (1 << (k + 1)) | mask
		if memo[idx] != 0 {
			return memo[idx]
		}

		ans := int8(100)
		for _, p := range pairs[k] {
			j, l := p.j, p.l
			newMask := (mask & ^(1 << k)) | (1 << j) | (1 << l)

			vk := int8(bits.OnesCount(uint(newMask)))
			if (mask&(1<<j)) == 0 || (mask&(1<<l)) == 0 {
				// We can overwrite a variable that is no longer needed
			} else {
				vk++
			}

			res := solve(k-1, newMask)
			if res > vk {
				vk = res
			}
			if vk < ans {
				ans = vk
			}
		}

		memo[idx] = ans
		return ans
	}

	res := solve(n-1, 0)
	if res >= 100 {
		fmt.Println("-1")
	} else {
		fmt.Println(res)
	}
}
```