For problem statement at 0-999/800-899/800-809/802/problemI.txt this is a correct solution, but verifier at 0-999/800-899/800-809/802/verifierI.go ends with All 102 tests passed. can you fix the verifier? package main
import (
"fmt"
"io"
"os"
)
type State struct {
len int
link int
next [26]int
sz int
}
func main() {
input, _ := io.ReadAll(os.Stdin)
var pos int
readNextString := func() string {
for pos < len(input) && input[pos] <= ' ' {
pos++
}
if pos >= len(input) {
return ""
}
start := pos
for pos < len(input) && input[pos] > ' ' {
pos++
}
return string(input[start:pos])
}
stStr := readNextString()
if stStr == "" {
return
}
var T int
for i := 0; i < len(stStr); i++ {
T = T*10 + int(stStr[i]-'0')
}
st := make([]State, 0, 200005)
c := make([]int, 100005)
order := make([]int, 200005)
for t := 0; t < T; t++ {
s := readNextString()
if s == "" {
break
}
n := len(s)
st = st[:1]
st[0] = State{link: -1}
sz := 1
last := 0
for i := 0; i < n; i++ {
char := s[i] - 'a'
cur := sz
sz++
st = append(st, State{len: st[last].len + 1, sz: 1, link: -1})
p := last
for p != -1 && st[p].next[char] == 0 {
st[p].next[char] = cur
p = st[p].link
}
if p == -1 {
st[cur].link = 0
} else {
q := st[p].next[char]
if st[p].len+1 == st[q].len {
st[cur].link = q
} else {
clone := sz
sz++
st = append(st, State{
len: st[p].len + 1,
next: st[q].next,
link: st[q].link,
sz: 0,
})
for p != -1 && st[p].next[char] == q {
st[p].next[char] = clone
p = st[p].link
}
st[q].link = clone
st[cur].link = clone
}
}
last = cur
}
for i := 0; i <= n; i++ {
c[i] = 0
}
for i := 0; i < sz; i++ {
c[st[i].len]++
}
for i := 1; i <= n; i++ {
c[i] += c[i-1]
}
for i := 0; i < sz; i++ {
c[st[i].len]--
order[c[st[i].len]] = i
}
for i := sz - 1; i > 0; i-- {
u := order[i]
if st[u].link != -1 {
st[st[u].link].sz += st[u].sz
}
}
var ans int64 = 0
for i := 1; i < sz; i++ {
u := order[i]
ans += int64(st[u].len-st[st[u].link].len) * int64(st[u].sz) * int64(st[u].sz)
}
fmt.Println(ans)
}
}