For problem statement at 0-999/200-299/290-299/291/problemE.txt this is a correct solution, but verifier at 0-999/200-299/290-299/291/verifierE.go ends with All tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"io"
"os"
)
type FastScanner struct {
data []byte
idx int
n int
}
func NewFastScanner() *FastScanner {
data, _ := io.ReadAll(os.Stdin)
return &FastScanner{data: data, n: len(data)}
}
func (fs *FastScanner) skip() {
for fs.idx < fs.n && fs.data[fs.idx] <= ' ' {
fs.idx++
}
}
func (fs *FastScanner) NextInt() int {
fs.skip()
val := 0
for fs.idx < fs.n {
b := fs.data[fs.idx]
if b < '0' || b > '9' {
break
}
val = val*10 + int(b-'0')
fs.idx++
}
return val
}
func (fs *FastScanner) NextString() string {
fs.skip()
start := fs.idx
for fs.idx < fs.n && fs.data[fs.idx] > ' ' {
fs.idx++
}
return string(fs.data[start:fs.idx])
}
type Edge struct {
to int
s string
}
func main() {
fs := NewFastScanner()
n := fs.NextInt()
children := make([][]Edge, n+1)
for v := 2; v <= n; v++ {
p := fs.NextInt()
s := fs.NextString()
children[p] = append(children[p], Edge{to: v, s: s})
}
t := fs.NextString()
m := len(t)
pi := make([]int, m)
for i := 1; i < m; i++ {
j := pi[i-1]
for j > 0 && t[i] != t[j] {
j = pi[j-1]
}
if t[i] == t[j] {
j++
}
pi[i] = j
}
aut := make([]int32, (m+1)*26)
for i := 0; i <= m; i++ {
base := i * 26
for c := 0; c < 26; c++ {
if i < m && int(t[i]-'a') == c {
aut[base+c] = int32(i + 1)
} else if i == 0 {
aut[base+c] = 0
} else {
aut[base+c] = aut[pi[i-1]*26+c]
}
}
}
state := make([]int, n+1)
stack := make([]int, 1, n)
stack[0] = 1
var ans int64
for len(stack) > 0 {
v := stack[len(stack)-1]
stack = stack[:len(stack)-1]
st := state[v]
for _, e := range children[v] {
j := st
s := e.s
for i := 0; i < len(s); i++ {
j = int(aut[j*26+int(s[i]-'a')])
if j == m {
ans++
}
}
state[e.to] = j
stack = append(stack, e.to)
}
}
out := bufio.NewWriterSize(os.Stdout, 1<<20)
fmt.Fprintln(out, ans)
out.Flush()
}