package main
import (
"fmt"
)
type point struct{
x int
y int
}
func main() {
var r, c int
fmt.Scan(&r, &c)
grid := [][]int{}
for i := 0; i < r; i++ {
var row []int
for j := 0; j < c; j++ {
var tmp int
fmt.Scan(&tmp)
row = append(row, tmp)
}
grid = append(grid, row)
}
path := make([]point, 0)
dfs(0, 0, &path, &grid)
for _, p := range path {
fmt.Printf("(%d,%d)\n", p.x, p.y)
}
}
func dfs(x, y int, path *[]point, grid *[][]int) (bool) {
defer func() {
if r := recover(); r != nil {
fmt.Println(grid, "Recovered:", r)
}
}()
if x < 0 || y < 0 || x >= len(*grid) || y >= len((*grid)[0]) || (*grid)[x][y] != 0{
return false
}
*path = append(*path, point{x, y})
(*grid)[x][y] = 1
if dfs(x-1, y, path, grid) {
return true
}
if dfs(x+1, y, path, grid) {
return true
}
if dfs(x, y+1, path, grid) {
return true
}
if dfs(x, y-1, path, grid) {
return true
}
if x== len(*grid) - 1 && y == len((*grid)[0]) - 1 {
return true
}
// fmt.Println(path)
*path = (*path)[0:len(*path)-1]
return false
}