#include <iostream>
#include <stack>
#include <vector>
#include <utility>

using namespace std;

stack<pair<int, int>> path;//记录路径

void MazeInput(vector<vector<int>>& maze, int row, int col)//输入迷宫
{
    for(int i = 0; i < row; i++)
    {
        for(int j = 0; j < col; j++)
        {
            cin >> maze[i][j];
        }
    }
}

//DFS寻找路径
bool FindPath(vector<vector<int>>& maze, int row, int col, pair<int, int> pos)
{
    int x = pos.first;
    int y = pos.second;
    path.push(pos);
    if(x < 0 || x >= row || y < 0 || y >= col || maze[x][y] != 0)
    {
        path.pop();
        return false;
    }
    if((x == row - 1) && (y == col - 1))
    {
        return true;
    }

    maze[x][y] = 2;
    bool res = FindPath(maze, row, col, pair<int, int>(x - 1, y)) ||
    FindPath(maze, row, col, pair<int, int>(x + 1, y)) ||
    FindPath(maze, row, col, pair<int, int>(x, y - 1)) ||
    FindPath(maze, row, col, pair<int, int>(x, y + 1));

    if(!res){
        path.pop();
    }
    return res;
}

//打印路径
void PrintPath(stack<pair<int, int>>& pt)
{
    stack<pair<int, int>> rPath;
    while(!pt.empty())
    {
        rPath.push(pt.top());
        pt.pop();
    }
    while(!rPath.empty())
    {
        cout << "(" << rPath.top().first << "," << rPath.top().second << ")" << endl;
        rPath.pop();
    }
}

int main()
{
    int row = 0;
    int col = 0;
    cin >> row >> col;
    vector<vector<int>> maze(row, vector<int>(col, 0));
    MazeInput(maze, row, col);
    pair<int, int> pos(0, 0);
    FindPath(maze, row, col, pos);
    PrintPath(path);
    return 0;
}