For problem statement at 0-999/400-499/470-479/475/problemC.txt this is a correct solution, but verifier at 0-999/400-499/470-479/475/verifierC.go ends with case 11: runtime error: exit status 2
panic: runtime error: index out of range [-1]
goroutine 1 [running]:
main.main()
/tmp/build-1155602779/solution.go:50 +0x624
input:
1 1
.
exit status 1 can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
var n, m int
fmt.Fscan(in, &n, &m)
grid := make([]string, n)
ps := make([][]int, n+1)
for i := 0; i <= n; i++ {
ps[i] = make([]int, m+1)
}
sr, sc := 0, 0
total := 0
for i := 1; i <= n; i++ {
fmt.Fscan(in, &grid[i-1])
row := grid[i-1]
for j := 1; j <= m; j++ {
v := 0
if row[j-1] == 'X' {
v = 1
total++
if sr == 0 {
sr, sc = i, j
}
}
ps[i][j] = ps[i-1][j] + ps[i][j-1] - ps[i-1][j-1] + v
}
}
rect := func(r1, c1, r2, c2 int) int {
if r1 > r2 || c1 > c2 {
return 0
}
return ps[r2][c2] - ps[r1-1][c2] - ps[r2][c1-1] + ps[r1-1][c1-1]
}
h := 0
for j := sc; j <= m && grid[sr-1][j-1] == 'X'; j++ {
h++
}
v := 0
for i := sr; i <= n && grid[i-1][sc-1] == 'X'; i++ {
v++
}
verify := func(x, y int) bool {
if rect(sr, sc, sr+x-1, sc+y-1) != x*y {
return false
}
r, c := sr, sc
for {
if c+y <= m && rect(r, c+1, r+x-1, c+y) == x*y && rect(r+x, c, n, c) == 0 {
c++
continue
}
if r+x <= n && rect(r+1, c, r+x, c+y-1) == x*y && rect(r, c+y, r, m) == 0 {
r++
continue
}
break
}
area := x*y + (c-sc)*x + (r-sr)*y
return area == total
}
ans := n*m + 1
for x := 1; x <= v; x++ {
if verify(x, h) {
a := x * h
if a < ans {
ans = a
}
}
}
for y := 1; y <= h; y++ {
if verify(v, y) {
a := v * y
if a < ans {
ans = a
}
}
}
if ans == n*m+1 {
fmt.Fprint(out, -1)
} else {
fmt.Fprint(out, ans)
}
}
```