← Home
For problem statement at 1000-1999/1500-1599/1570-1579/1575/problemJ.txt this is a correct solution, but verifier at 1000-1999/1500-1599/1570-1579/1575/verifierJ.go ends with reference failed: exit status 2: panic: runtime error: index out of range [4] with length 4

goroutine 1 [running]:
main.drop(0x0?, 0x0?)
	/home/ubuntu/codeforces/1000-1999/1500-1599/1570-1579/1575/1575J.go:17 +0x1b4
main.drop(0x0, 0x3)
	/home/ubuntu/codeforces/1000-1999/1500-1599/1570-1579/1575/1575J.go:24 +0x124
main.main()
	/home/ubuntu/codeforces/1000-1999/1500-1599/1570-1579/1575/1575J.go:53 +0x3d4

exit status 1 can you fix the verifier? ```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func nextInt(r *bufio.Reader) int {
	sign := 1
	v := 0
	b, err := r.ReadByte()
	for (b < '0' || b > '9') && b != '-' {
		if err != nil {
			return 0
		}
		b, err = r.ReadByte()
	}
	if b == '-' {
		sign = -1
		b, err = r.ReadByte()
	}
	for b >= '0' && b <= '9' {
		v = v*10 + int(b-'0')
		b, err = r.ReadByte()
		if err != nil {
			break
		}
	}
	return sign * v
}

func find(parent [][]int, c, r, n int) int {
	if r > n {
		return n + 1
	}
	p := parent[c][r]
	if p == r {
		return r
	}
	parent[c][r] = find(parent, c, p, n)
	return parent[c][r]
}

func drop(a [][]int, parent [][]int, n, m, c int) int {
	r := find(parent, c, 1, n)
	for r != n+1 {
		dir := a[r][c]
		if dir == 1 {
			parent[c][r] = find(parent, c, r+1, n)
			a[r][c] = 2
			c++
			r = find(parent, c, r, n)
		} else if dir == 3 {
			parent[c][r] = find(parent, c, r+1, n)
			a[r][c] = 2
			c--
			r = find(parent, c, r, n)
		} else {
			parent[c][r] = find(parent, c, r+1, n)
			r = find(parent, c, r, n)
		}
	}
	return c
}

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	n := nextInt(in)
	m := nextInt(in)
	k := nextInt(in)

	a := make([][]int, n+1)
	for i := 1; i <= n; i++ {
		a[i] = make([]int, m+1)
		for j := 1; j <= m; j++ {
			a[i][j] = nextInt(in)
		}
	}

	parent := make([][]int, m+1)
	for c := 1; c <= m; c++ {
		parent[c] = make([]int, n+2)
		for r := 1; r <= n+1; r++ {
			parent[c][r] = r
		}
		for r := 1; r <= n; r++ {
			if a[r][c] == 2 {
				parent[c][r] = r + 1
			}
		}
	}

	for i := 0; i < k; i++ {
		c := nextInt(in)
		ans := drop(a, parent, n, m, c)
		if i > 0 {
			fmt.Fprint(out, " ")
		}
		fmt.Fprint(out, ans)
	}
	fmt.Fprintln(out)
}
```