# ======================================
# 题目:迷宫寻路(单一路径,DFS+回溯模板)
# ======================================

# --------------------------
# 1. 读入迷宫数据
# --------------------------
h, w = map(int, input().split())  # h行,w列
grid = []
for _ in range(h):
    # 读入每一行的迷宫数据,0表示可走,1表示墙
    row = list(map(int, input().split()))
    grid.append(row)

# --------------------------
# 2. 初始化需要用到的变量
# --------------------------
# 记录路径的列表,用来存走过的坐标,最后直接输出
path = []
# 记录哪些格子已经走过,避免走回头路(死循环)
visited = [[False for _ in range(w)] for _ in range(h)]
# 四个方向:上、下、左、右(对应坐标变化)
directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]


# --------------------------
# 3. 核心:DFS递归函数(带回溯)
# 参数:当前位置坐标 (x, y)
# 返回值:bool,表示从当前位置出发,能否走到终点
# --------------------------
def dfs(x, y):
    # 第一步:把当前坐标加入路径
    path.append((x, y))

    # 第二步:判断是否已经到达终点
    # 终点坐标是 (h-1, w-1),因为题目里说起点是(0,0),终点是最后一格
    if x == h - 1 and y == w - 1:
        return True  # 找到终点了,返回True,让上层知道路通了

    # 第三步:标记当前格子为已访问,避免回头走
    visited[x][y] = True

    # 第四步:依次尝试四个方向
    for dx, dy in directions:
        # 计算新的坐标
        nx = x + dx
        ny = y + dy

        # 判断新坐标是否合法(不越界、不是墙、没走过)
        # 条件1:nx在 0~h-1 之间,ny在 0~w-1 之间(不越界)
        # 条件2:grid[nx][ny] == 0(不是墙,可以走)
        # 条件3:visited[nx][ny] == False(没走过,不是回头路)
        if 0 <= nx < h and 0 <= ny < w and grid[nx][ny] == 0 and not visited[nx][ny]:
            # 递归调用DFS,从新坐标继续走
            if dfs(nx, ny):
                return True  # 只要有一个方向能走通,就直接返回True,不再试其他方向

    # 第五步:四个方向都走不通,回溯!
    # 把当前坐标从路径里删掉(相当于“退回去”)
    path.pop()
    return False  # 告诉上层:这个方向走不通,换别的路试试


# --------------------------
# 4. 主程序:调用DFS,然后输出路径
# --------------------------
# 从起点(0,0)开始走
dfs(0, 0)

# 按题目要求,输出路径上的每个坐标
for x, y in path:
    print(f"({x},{y})")