For problem statement at 1000-1999/1000-1099/1030-1039/1036/problemG.txt this is a correct solution, but verifier at 1000-1999/1000-1099/1030-1039/1036/verifierG.go ends with all tests passed can you fix the verifier? ```go
package main
import (
"fmt"
"io"
"math/bits"
"os"
)
func main() {
buf, _ := io.ReadAll(os.Stdin)
var pos int
readInt := func() int {
for pos < len(buf) && (buf[pos] < '0' || buf[pos] > '9') {
pos++
}
if pos >= len(buf) {
return 0
}
res := 0
for pos < len(buf) && buf[pos] >= '0' && buf[pos] <= '9' {
res = res*10 + int(buf[pos]-'0')
pos++
}
return res
}
n := readInt()
m := readInt()
if n == 0 {
return
}
head := make([]int, n+1)
for i := range head {
head[i] = -1
}
to := make([]int, m)
next := make([]int, m)
inDeg := make([]int, n+1)
outDeg := make([]int, n+1)
for i := 0; i < m; i++ {
u := readInt()
v := readInt()
to[i] = v
next[i] = head[u]
head[u] = i
inDeg[v]++
outDeg[u]++
}
var S, T []int
for i := 1; i <= n; i++ {
if inDeg[i] == 0 {
S = append(S, i)
}
if outDeg[i] == 0 {
T = append(T, i)
}
}
k := len(S)
if k <= 1 {
fmt.Println("YES")
return
}
sinkIdx := make([]int, n+1)
for i := range sinkIdx {
sinkIdx[i] = -1
}
for j, t := range T {
sinkIdx[t] = j
}
reach := make([]uint32, k)
visited := make([]int, n+1)
q := make([]int, 0, n)
for i, s := range S {
marker := i + 1
q = q[:0]
q = append(q, s)
visited[s] = marker
for len(q) > 0 {
u := q[0]
q = q[1:]
if sinkIdx[u] != -1 {
reach[i] |= 1 << sinkIdx[u]
}
for e := head[u]; e != -1; e = next[e] {
v := to[e]
if visited[v] != marker {
visited[v] = marker
q = append(q, v)
}
}
}
}
N := make([]uint32, 1<<k)
for i := 0; i < k; i++ {
N[1<<i] = reach[i]
}
limit := uint32((1 << k) - 1)
for mask := uint32(1); mask < limit; mask++ {
if mask&(mask-1) != 0 {
lsb := mask & -mask
N[mask] = N[mask^lsb] | N[lsb]
}
if bits.OnesCount32(N[mask]) <= bits.OnesCount32(mask) {
fmt.Println("NO")
return
}
}
fmt.Println("YES")
}
```