import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Queue;
import java.util.Scanner;


public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int h=sc.nextInt();
        int w=sc.nextInt();
        int[][]grid=new int[h][w];
        for (int i = 0; i < h; i++) {
            for (int j = 0; j < w; j++) {
                grid[i][j]=sc.nextInt();
                // if(grid[i][j]==1){
                //     grid[i][j]=Integer.MAX_VALUE;
                // }
            }
        }   
        int[][]dis=new int[h][w];
        for (int i = 0; i < dis.length; i++) {
            Arrays.fill(dis[i], Integer.MAX_VALUE/2);
        }
        dis[0][0]=0;
        Queue<int[]>que=new ArrayDeque<>();
        boolean[][]vis=new boolean[h][w];
        que.add(new int[]{0,0,0});
        vis[0][0]=true;
        int[][]parent=new int[h][w];
        parent[0][0]=-1;
        int[][]dirs={{-1,0},{1,0},{0,-1},{0,1}};
        while (!que.isEmpty()) {
            int[]cur=que.poll();
            for (int[] d : dirs) {
                int nx=cur[0]+d[0];
                int ny=cur[1]+d[1];
                int val=cur[2];
                if(nx>=0&&ny>=0&&nx<h&&ny<w&&grid[nx][ny]!=1&&!vis[nx][ny]){
                    vis[nx][ny]=true;
                    parent[nx][ny]=cur[0]*100+cur[1];
                    dis[nx][ny]=val+1;
                    que.add(new int[]{nx,ny,val+1});
                }
            }
        }
        int x=h-1,y=w-1;
        List<int[]>list=new ArrayList<>();
        list.add(new int[]{x,y});
        while (parent[x][y]!=-1) {
            int val=parent[x][y];
            int nx=val/100;
            int ny=val%100;
            x=nx;
            y=ny;
            list.add(new int[]{x,y});
        }
        for (int i = list.size()-1; i >=0; i--) {
            int[]cur=list.get(i);
           System.out.println("("+cur[0]+","+cur[1]+")");
        }
        sc.close();
    }
}