For problem statement at 0-999/300-399/360-369/367/problemB.txt this is a correct solution, but verifier at 0-999/300-399/360-369/367/verifierB.go ends with All tests passed can you fix the verifier? package main
import (
"io"
"os"
"sort"
"strconv"
"strings"
)
func main() {
data, _ := io.ReadAll(os.Stdin)
pos := 0
nextInt := func() int {
for pos < len(data) && (data[pos] < '0' || data[pos] > '9') {
pos++
}
val := 0
for pos < len(data) && data[pos] >= '0' && data[pos] <= '9' {
val = val*10 + int(data[pos]-'0')
pos++
}
return val
}
n := nextInt()
m := nextInt()
p := nextInt()
a := make([]int, n)
for i := 0; i < n; i++ {
a[i] = nextInt()
}
id := make(map[int]int, m)
need := make([]int, 0, m)
for i := 0; i < m; i++ {
x := nextInt()
if idx, ok := id[x]; ok {
need[idx]++
} else {
id[x] = len(need)
need = append(need, 1)
}
}
k := len(need)
mapped := make([]int, n)
for i, x := range a {
if idx, ok := id[x]; ok {
mapped[i] = idx
} else {
mapped[i] = -1
}
}
cnt := make([]int, k)
vis := make([]int, k)
window := make([]int, m)
ans := make([]int, 0)
ver := 1
for r := 0; r < p && r < n; r++ {
good := 0
bad := 0
t := 0
for idx := r; idx < n; idx += p {
if t >= m {
old := window[t%m]
if old == -1 {
bad--
} else {
if vis[old] != ver {
vis[old] = ver
cnt[old] = 0
}
if cnt[old] == need[old] {
good--
}
cnt[old]--
if cnt[old] == need[old] {
good++
}
}
}
v := mapped[idx]
if v == -1 {
bad++
} else {
if vis[v] != ver {
vis[v] = ver
cnt[v] = 0
}
if cnt[v] == need[v] {
good--
}
cnt[v]++
if cnt[v] == need[v] {
good++
}
}
window[t%m] = v
if t >= m-1 && bad == 0 && good == k {
startT := t - m + 1
ans = append(ans, r+1+startT*p)
}
t++
}
ver++
}
sort.Ints(ans)
var sb strings.Builder
sb.WriteString(strconv.Itoa(len(ans)))
sb.WriteByte('\n')
for i, v := range ans {
if i > 0 {
sb.WriteByte(' ')
}
sb.WriteString(strconv.Itoa(v))
}
sb.WriteByte('\n')
os.Stdout.WriteString(sb.String())
}