For problem statement at 1000-1999/1500-1599/1520-1529/1520/problemF2.txt this is a correct solution, but verifier at 1000-1999/1500-1599/1520-1529/1520/verifierF2.go ends with All tests passed can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
)
var (
in = bufio.NewReader(os.Stdin)
out = bufio.NewWriter(os.Stdout)
memo []int
)
func main() {
defer out.Flush()
var n, t int
fmt.Fscan(in, &n, &t)
// Max size for segment tree is 4*n
memo = make([]int, 4*n+1)
for i := range memo {
memo[i] = -1
}
for i := 0; i < t; i++ {
var k int
fmt.Fscan(in, &k)
pos := solve(1, 1, n, k)
fmt.Fprintf(out, "! %d\n", pos)
out.Flush()
}
}
func solve(v, l, r, k int) int {
if l == r {
return l
}
mid := (l + r) / 2
// If the count of zeros in left child [l, mid] is unknown, query it
if memo[2*v] == -1 {
fmt.Fprintf(out, "? %d %d\n", l, mid)
out.Flush()
var sum int
fmt.Fscan(in, &sum)
// Number of zeros = length of range - sum of ones
memo[2*v] = (mid - l + 1) - sum
}
if k <= memo[2*v] {
// Go left
memo[2*v]-- // One zero will be turned to one in this subtree
return solve(2*v, l, mid, k)
} else {
// Go right
// If right child count is cached, decrement it as well to keep state consistent
if memo[2*v+1] != -1 {
memo[2*v+1]--
}
return solve(2*v+1, mid+1, r, k-memo[2*v])
}
}
```