For problem statement at 1000-1999/1700-1799/1770-1779/1770/problemG.txt this is a correct solution, but verifier at 1000-1999/1700-1799/1770-1779/1770/verifierG.go ends with case 1 failed
expected:
3
got:
5
exit status 1 can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
)
const MOD = 998244353
func solve() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Buffer(make([]byte, 1024*1024), 1024*1024)
if !scanner.Scan() {
return
}
s := scanner.Text()
n := len(s)
minPref := 0
curr := 0
for i := 0; i < n; i++ {
if s[i] == '(' {
curr++
} else {
curr--
}
if curr < minPref {
minPref = curr
}
}
M := -minPref
if M == 0 && curr == 0 {
fmt.Println(1)
return
}
firstMin := -1
lastMin := -1
curr = 0
for i := 0; i < n; i++ {
if s[i] == '(' {
curr++
} else {
curr--
}
if curr == minPref {
if firstMin == -1 {
firstMin = i
}
lastMin = i
}
}
ans1 := calc(s[:firstMin+1], M, ')')
ans2 := calc(reverseSwap(s[lastMin:]), curr-minPref, ')')
ans := (ans1 * ans2) % MOD
fmt.Println(ans)
}
func reverseSwap(s string) string {
b := []byte(s)
for i, j := 0, len(b)-1; i < j; i, j = i+1, j-1 {
b[i], b[j] = b[j], b[i]
}
for i := 0; i < len(b); i++ {
if b[i] == '(' {
b[i] = ')'
} else {
b[i] = '('
}
}
return string(b)
}
func calc(s string, M int, dropChar byte) int64 {
if M == 0 {
return 1
}
dp := make([]int, M+1)
dp[0] = 1
pref := 0
for i := 0; i < len(s); i++ {
if s[i] != dropChar {
pref++
} else {
pref--
limit := -pref
if limit < 0 {
limit = 0
}
for k := limit; k <= M; k++ {
if k > 0 {
dp[k] = (dp[k] + dp[k-1])
if dp[k] >= MOD {
dp[k] -= MOD
}
}
}
if limit > 0 {
dp[limit-1] = 0
}
}
}
return int64(dp[M])
}
func main() {
solve()
}
```