For problem statement at 0-999/100-199/130-139/138/problemE.txt this is a correct solution, but verifier at 0-999/100-199/130-139/138/verifierE.go ends with All tests passed can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
)
type Constraint struct {
l, r int
}
func readString(in *bufio.Reader) string {
var res []byte
for {
b, err := in.ReadByte()
if err != nil {
break
}
if b > 32 {
res = append(res, b)
break
}
}
for {
b, err := in.ReadByte()
if err != nil || b <= 32 {
break
}
res = append(res, b)
}
return string(res)
}
func readInt(in *bufio.Reader) int {
var res int
for {
b, err := in.ReadByte()
if err != nil {
break
}
if b > 32 {
res = int(b - '0')
break
}
}
for {
b, err := in.ReadByte()
if err != nil || b <= 32 {
break
}
res = res*10 + int(b - '0')
}
return res
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
s := readString(in)
if len(s) == 0 {
return
}
k := readInt(in)
L := readInt(in)
R := readInt(in)
constraints := make([][]Constraint, 26)
for i := 0; i < k; i++ {
cStr := readString(in)
l := readInt(in)
r := readInt(in)
c := cStr[0] - 'a'
constraints[c] = append(constraints[c], Constraint{l, r})
}
n := len(s)
S := make([]byte, n+1)
for i := 0; i < n; i++ {
S[i+1] = s[i]
}
occ := make([][]int, 26)
for i := 1; i <= n; i++ {
c := S[i] - 'a'
occ[c] = append(occ[c], i)
}
for c := 0; c < 26; c++ {
occ[c] = append(occ[c], n+1)
}
diff := make([]int, n+2)
for c := 0; c < 26; c++ {
for _, cons := range constraints[c] {
l, r := cons.l, cons.r
start := 1
if l > 0 {
if l-1 < len(occ[c])-1 {
start = occ[c][l-1]
} else {
start = n + 1
}
}
end := n + 1
if r < len(occ[c])-1 {
end = occ[c][r]
}
if start < end {
diff[start]++
diff[end]--
}
}
}
count := make([]int, n+2)
freq := make([]int, k+2)
valid_substrings := 0
for x := 1; x <= n; x++ {
count[x] = count[x-1] + diff[x]
freq[count[x]]++
if L <= count[x] && count[x] <= R {
valid_substrings++
}
}
total_ans := int64(valid_substrings)
pos_ptr := make([]int, 26)
for i := 1; i < n; i++ {
v := count[i]
freq[v]--
if L <= v && v <= R {
valid_substrings--
}
char := S[i] - 'a'
p := pos_ptr[char]
for _, cons := range constraints[char] {
l, r := cons.l, cons.r
if l > 0 {
start := n + 1
if p+l-1 < len(occ[char])-1 {
start = occ[char][p+l-1]
}
if start < i+1 {
start = i + 1
}
end := n + 1
if p+l < len(occ[char])-1 {
end = occ[char][p+l]
}
for x := start; x < end; x++ {
v := count[x]
freq[v]--
if L <= v && v <= R {
valid_substrings--
}
count[x]--
v--
freq[v]++
if L <= v && v <= R {
valid_substrings++
}
}
}
start := n + 1
if p+r < len(occ[char])-1 {
start = occ[char][p+r]
}
if start < i+1 {
start = i + 1
}
end := n + 1
if p+r+1 < len(occ[char])-1 {
end = occ[char][p+r+1]
}
for x := start; x < end; x++ {
v := count[x]
freq[v]--
if L <= v && v <= R {
valid_substrings--
}
count[x]++
v++
freq[v]++
if L <= v && v <= R {
valid_substrings++
}
}
}
pos_ptr[char]++
total_ans += int64(valid_substrings)
}
fmt.Println(total_ans)
}
```