For problem statement at 0-999/600-699/630-639/631/problemD.txt this is a correct solution, but verifier at 0-999/600-699/630-639/631/verifierD.go ends with All 100 tests passed can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Run struct {
l int64
c byte
}
func parseToken(tok string) (int64, byte) {
parts := strings.Split(tok, "-")
l, _ := strconv.ParseInt(parts[0], 10, 64)
return l, parts[1][0]
}
func mergeRuns(a []Run) []Run {
if len(a) == 0 {
return a
}
res := make([]Run, 0, len(a))
cur := a[0]
for i := 1; i < len(a); i++ {
if a[i].c == cur.c {
cur.l += a[i].l
} else {
res = append(res, cur)
cur = a[i]
}
}
res = append(res, cur)
return res
}
func equal(a, b Run) bool {
return a.c == b.c && a.l == b.l
}
func prefixFunction(p []Run) []int {
pi := make([]int, len(p))
for i := 1; i < len(p); i++ {
j := pi[i-1]
for j > 0 && !equal(p[i], p[j]) {
j = pi[j-1]
}
if equal(p[i], p[j]) {
j++
}
pi[i] = j
}
return pi
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
var n, m int
fmt.Fscan(in, &n, &m)
t := make([]Run, 0, n)
for i := 0; i < n; i++ {
var tok string
fmt.Fscan(in, &tok)
l, c := parseToken(tok)
t = append(t, Run{l, c})
}
s := make([]Run, 0, m)
for i := 0; i < m; i++ {
var tok string
fmt.Fscan(in, &tok)
l, c := parseToken(tok)
s = append(s, Run{l, c})
}
t = mergeRuns(t)
s = mergeRuns(s)
var ans int64 = 0
if len(s) == 1 {
p := s[0]
for _, r := range t {
if r.c == p.c && r.l >= p.l {
ans += r.l - p.l + 1
}
}
fmt.Fprintln(out, ans)
return
}
if len(s) == 2 {
for i := 0; i+1 < len(t); i++ {
if t[i].c == s[0].c && t[i+1].c == s[1].c && t[i].l >= s[0].l && t[i+1].l >= s[1].l {
ans++
}
}
fmt.Fprintln(out, ans)
return
}
if len(t) < len(s) {
fmt.Fprintln(out, 0)
return
}
P := s[1 : len(s)-1]
Tmid := t[1 : len(t)-1]
pi := prefixFunction(P)
j := 0
plen := len(P)
for i := 0; i < len(Tmid); i++ {
for j > 0 && !equal(Tmid[i], P[j]) {
j = pi[j-1]
}
if equal(Tmid[i], P[j]) {
j++
}
if j == plen {
k := i - plen + 1
left := t[k]
right := t[k+plen+1]
if left.c == s[0].c && left.l >= s[0].l && right.c == s[len(s)-1].c && right.l >= s[len(s)-1].l {
ans++
}
j = pi[j-1]
}
}
fmt.Fprintln(out, ans)
}
```