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
}