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