For problem statement at 1000-1999/1200-1299/1280-1289/1286/problemE.txt this is a correct solution, but verifier at 1000-1999/1200-1299/1280-1289/1286/verifierE.go ends with can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var n int
if _, err := fmt.Fscanf(reader, "%d\n", &n); err != nil {
return
}
S := make([]byte, 0, n)
W := make([]int, 0, n)
ans := int64(0)
MASK := 1<<30 - 1
pi := make([]int, n)
st := make([][][2]int, n)
for i := 0; i < n; i++ {
var cStr string
var w int
fmt.Fscanf(reader, "%s %d\n", &cStr, &w)
c := cStr[0]
shift := int(ans % 26)
c = byte((int(c-'a')+shift)%26 + 'a')
w = w ^ (int(ans) & MASK)
S = append(S, c)
W = append(W, w)
if i == 0 {
pi[i] = 0
st[i] = [][2]int{{w, 1}}
ans += int64(w)
fmt.Fprintln(writer, ans)
continue
}
j := pi[i-1]
for j > 0 && S[i] != S[j] {
j = pi[j-1]
}
if S[i] == S[j] {
j++
}
pi[i] = j
newSt := [][2]int{}
for _, pair := range st[i-1] {
val := pair[0]
idx := pair[1]
if W[i] < val {
val = W[i]
}
if S[i] == S[idx] {
if len(newSt) > 0 && newSt[len(newSt)-1][0] == val {
} else {
newSt = append(newSt, [2]int{val, idx + 1})
}
}
}
if S[i] == S[0] {
if len(newSt) > 0 && newSt[len(newSt)-1][0] == W[i] {
} else {
newSt = append(newSt, [2]int{W[i], 1})
}
}
st[i] = newSt
ans += int64(W[0])
if len(st[i]) > 0 {
prevIdx := i + 1
for idx := 0; idx < len(st[i]); idx++ {
currVal := st[i][idx][0]
currLen := st[i][idx][1]
ans += int64(currVal) * int64(prevIdx-currLen)
prevIdx = currLen
}
ans += int64(W[0]) * int64(prevIdx-1)
} else {
ans += int64(W[0]) * int64(i)
}
fmt.Fprintln(writer, ans)
}
}