← Home
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)
	}
}
```