For problem statement at 1000-1999/1700-1799/1750-1759/1750/problemG.txt this is a correct solution, but verifier at 1000-1999/1700-1799/1750-1759/1750/verifierG.go ends with case 3 failed: runtime error: exit status 2
panic: runtime error: index out of range [4] with length 4
goroutine 1 [running]:
main.main()
/tmp/build-3630621493/solution.go:95 +0x808
input:
2 3
1 3
exit status 1 can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
var n int
var m_in int64
if _, err := fmt.Fscan(reader, &n, &m_in); err != nil {
return
}
m := m_in
p := make([]int, n)
for i := 0; i < n; i++ {
fmt.Fscan(reader, &p[i])
}
C := make([][]int64, n+1)
for i := 0; i <= n; i++ {
C[i] = make([]int64, n+1)
C[i][0] = 1
for j := 1; j <= i; j++ {
C[i][j] = (C[i-1][j-1] + C[i-1][j]) % m
}
}
fact := make([]int64, n+1)
fact[0] = 1
for i := 1; i <= n; i++ {
fact[i] = (fact[i-1] * int64(i)) % m
}
f := make([][]int64, n+1)
for i := 0; i <= n; i++ {
f[i] = make([]int64, n+1)
}
for p_val := 0; p_val <= n; p_val++ {
f[0][p_val] = fact[p_val]
}
for d := 1; d <= n; d++ {
for p_val := d; p_val <= n; p_val++ {
f[d][p_val] = (f[d-1][p_val] - f[d-1][p_val-1] + m) % m
}
}
ans := make([]int64, n+1)
in_S := make([]bool, n+2)
for i := 1; i <= n; i++ {
in_S[i] = true
}
c := n - 1
c_prefix := 0
for i := 0; i < n; i++ {
L := n - i
cnt := [2][2]int64{}
for v := 1; v < p[i]; v++ {
if in_S[v] {
is_match := 0
if i > 0 && v == p[i-1]+1 {
is_match = 1
}
has_prev := 0
if in_S[v-1] {
has_prev = 1
}
cnt[is_match][has_prev]++
}
}
for is_match := 0; is_match < 2; is_match++ {
for has_prev := 0; has_prev < 2; has_prev++ {
if cnt[is_match][has_prev] > 0 {
FL := c_prefix + is_match
C_star := c - has_prev
for j := 0; j <= C_star; j++ {
ways := (C[C_star][j] * f[C_star-j][L-1-j]) % m
ways = (ways * cnt[is_match][has_prev]) % m
ans[FL+j] = (ans[FL+j] + ways) % m
}
}
}
}
in_S[p[i]] = false
if in_S[p[i]-1] {
c--
}
if in_S[p[i]+1] {
c--
}
if i > 0 && p[i] == p[i-1]+1 {
c_prefix++
}
}
for k := 1; k <= n; k++ {
if k > 1 {
fmt.Print(" ")
}
fmt.Print(ans[n-k])
}
fmt.Println()
}