For problem statement at 1000-1999/1300-1399/1310-1319/1311/problemE.txt this is a correct solution, but verifier at 1000-1999/1300-1399/1310-1319/1311/verifierE.go ends with All 100 tests passed can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
)
func minDepthSum(n int) int {
if n <= 1 {
return 0
}
rem := n - 1
prev := 1
depth := 1
sum := 0
for rem > 0 {
take := prev * 2
if take > rem {
take = rem
}
sum += depth * take
rem -= take
prev = take
depth++
}
return sum
}
func minSuffix(rem, startCount, startDepth int) int {
if rem == 0 {
return 0
}
if startCount == 0 {
return 1 << 60
}
sum := 0
cur := startCount
d := startDepth
left := rem
for left > 0 {
take := cur * 2
if take > left {
take = left
}
sum += d * take
left -= take
cur = take
d++
}
return sum
}
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var t int
if _, err := fmt.Fscan(in, &t); err != nil {
return
}
for ; t > 0; t-- {
var n, d int
fmt.Fscan(in, &n, &d)
smin := minDepthSum(n)
smax := n * (n - 1) / 2
if d < smin || d > smax {
fmt.Fprintln(out, "NO")
continue
}
counts := []int{1}
sumSoFar := 0
pc := 1
rem := n - 1
depth := 1
ok := true
for rem > 0 && ok {
cap := pc * 2
if cap > rem {
cap = rem
}
chosen := -1
for x := 0; x <= cap; x++ {
sumNow := sumSoFar + depth*x
remAfter := rem - x
if remAfter == 0 {
if sumNow == d {
chosen = x
break
} else {
continue
}
}
if x == 0 {
continue
}
minS := minSuffix(remAfter, x, depth+1)
maxS := remAfter*depth + remAfter*(remAfter+1)/2
totalMin := sumNow + minS
totalMax := sumNow + maxS
if d >= totalMin && d <= totalMax {
chosen = x
break
}
}
if chosen == -1 {
ok = false
break
}
counts = append(counts, chosen)
pc = chosen
sumSoFar += depth * chosen
rem -= chosen
depth++
}
if !ok {
fmt.Fprintln(out, "NO")
continue
}
parents := make([]int, n+1)
levels := make([][]int, len(counts))
levels[0] = []int{1}
id := 2
for i := 0; i+1 < len(counts); i++ {
k := counts[i+1]
if k == 0 {
levels[i+1] = []int{}
continue
}
par := levels[i]
children := make([]int, 0, k)
need := k
for _, p := range par {
if need == 0 {
break
}
// up to two children per parent
for c := 0; c < 2 && need > 0; c++ {
parents[id] = p
children = append(children, id)
id++
need--
}
}
levels[i+1] = children
}
fmt.Fprintln(out, "YES")
for i := 2; i <= n; i++ {
if i > 2 {
fmt.Fprint(out, " ")
}
fmt.Fprint(out, parents[i])
}
fmt.Fprintln(out)
}
}
```