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)
pos := 0
nextInt := 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 := nextInt()
m := nextInt()
if n == 0 {
return
}
head := make([]int, n)
for i := range head {
head[i] = -1
}
next := make([]int, m)
to := make([]int, m)
inDegree := make([]int, n)
outDegree := make([]int, n)
for i := 0; i < m; i++ {
u := nextInt() - 1
v := nextInt() - 1
to[i] = v
next[i] = head[u]
head[u] = i
outDegree[u]++
inDegree[v]++
}
var sources []int
var sinks []int
for i := 0; i < n; i++ {
if inDegree[i] == 0 {
sources = append(sources, i)
}
if outDegree[i] == 0 {
sinks = append(sinks, i)
}
}
k := len(sources)
if k == 0 {
fmt.Println("YES")
return
}
sourceMask := make([]uint32, n)
queue := make([]int, n)
headQ, tailQ := 0, 0
for i, s := range sources {
sourceMask[s] = 1 << i
queue[tailQ] = s
tailQ++
}
for headQ < tailQ {
u := queue[headQ]
headQ++
for e := head[u]; e != -1; e = next[e] {
v := to[e]
sourceMask[v] |= sourceMask[u]
inDegree[v]--
if inDegree[v] == 0 {
queue[tailQ] = v
tailQ++
}
}
}
sinkMask := make([]uint32, k)
for j, sink := range sinks {
sMask := sourceMask[sink]
for i := 0; i < k; i++ {
if (sMask & (1 << i)) != 0 {
sinkMask[i] |= (1 << j)
}
}
}
sinksReached := make([]uint32, 1<<k)
for x := 1; x < (1<<k)-1; x++ {
lsb := x & -x
idx := bits.TrailingZeros32(uint32(lsb))
sinksReached[x] = sinksReached[x^lsb] | sinkMask[idx]
if bits.OnesCount32(sinksReached[x]) <= bits.OnesCount32(uint32(x)) {
fmt.Println("NO")
return
}
}
fmt.Println("YES")
}
```