For problem statement at 0-999/100-199/110-119/115/problemD.txt this is a correct solution, but verifier at 0-999/100-199/110-119/115/verifierD.go ends with All tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
"strings"
)
const MOD int64 = 1000003
func isDigit(c byte) bool {
return c >= '0' && c <= '9'
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
s, _ := in.ReadString('\n')
s = strings.TrimSpace(s)
n := len(s)
if n == 0 {
fmt.Print(0)
return
}
pre := make([]int, 0)
i := 0
cnt := 0
for i < n && (s[i] == '+' || s[i] == '-') {
cnt++
i++
}
if i == n || !isDigit(s[i]) {
fmt.Print(0)
return
}
pre = append(pre, cnt)
for i < n && isDigit(s[i]) {
i++
}
for i < n {
c := s[i]
if c != '+' && c != '-' && c != '*' && c != '/' {
fmt.Print(0)
return
}
i++
cnt = 0
for i < n && !isDigit(s[i]) {
if s[i] != '+' && s[i] != '-' {
fmt.Print(0)
return
}
cnt++
i++
}
if i == n {
fmt.Print(0)
return
}
pre = append(pre, cnt)
for i < n && isDigit(s[i]) {
i++
}
}
k := len(pre)
f := make([][]int, k)
for i := 0; i < k; i++ {
f[i] = make([]int, k)
f[i][i] = 1
}
for l := k - 1; l >= 0; l-- {
length := k - l
next := make([]int, length)
next[0] = 1
for off := 1; off < length; off++ {
r := l + off
var sum int64
for j := 0; j < off; j++ {
sum += int64(next[j]) * int64(f[l+j+1][r])
}
next[off] = int(sum % MOD)
}
for t := 0; t < pre[l]; t++ {
cur := make([]int, length)
cur[0] = 1
for off := 1; off < length; off++ {
r := l + off
sum := int64(next[off])
for j := 0; j < off; j++ {
sum += int64(cur[j]) * int64(f[l+j+1][r])
}
cur[off] = int(sum % MOD)
}
next = cur
}
copy(f[l][l:], next)
}
fmt.Print(f[0][k-1] % int(MOD))
}