// 内存用的多了点

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int N = scanner.nextInt();
            int M = scanner.nextInt();

            int[][] matrix = new int[N][M];
            for (int i = 0; i < N; i++) {
                for (int j = 0; j < M; j++) {
                    matrix[i][j] = scanner.nextInt();
                }
            }

            List<Point> pList = new ArrayList<Point>();

            Main migong = new Main();
            List<Point> list = migong.migong(matrix, 0, 0, N, M, pList);
            list.forEach(System.out::println);
        }
    }

    private List<Point> migong(int[][] matrix, int x, int y, int N, int M, List<Point> pListOld) {
        List<Point> pList = new ArrayList<>(pListOld);
        Point pnew = new Point(x, y);
        if (x >= 0 && x <= N - 1 && y >= 0 && y <= M - 1 && matrix[x][y] == 0) {
            pList.add(pnew);
        } else {
            return null;
        }

        for(Point p : pListOld){
            if(pnew.equals(p)){
                return null;
            }
        }

        if (x == N - 1 && y == M - 1) {
            return pList;
        }

        if (pList.size() >= M * N) {
            return null;
        }


        List<List<Point>> list = new ArrayList();

        list.add(migong(matrix, x + 1, y, N, M, pList));
        list.add(migong(matrix, x - 1, y, N, M, pList));
        list.add(migong(matrix, x, y + 1, N, M, pList));
        list.add(migong(matrix, x, y - 1, N, M, pList));

        return getMin(list);
    }

    private List<Point> getMin(List<List<Point>> list) {
        List<Point> min = list.get(0);
        for (int i = 1; i < list.size(); i++) {
            if (min == null) {
                min = list.get(i);
                continue;
            }
            if (list.get(i) == null) {
                continue;
            }
            min = getMinPList(min, list.get(i));
        }
        return min;
    }

    private List<Point> getMinPList(List<Point> p1, List<Point> p2) {
        int min = Math.min(p1.size(), p2.size());
        if (min == p1.size()) {
            return p1;
        } else {
            return p2;
        }
    }


    class Point {
        private int x;

        private int y;

        public int getX() {
            return x;
        }

        public void setX(int x) {
            this.x = x;
        }

        public int getY() {
            return y;
        }

        public void setY(int y) {
            this.y = y;
        }

        public Point(int x, int y) {
            this.x = x;
            this.y = y;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            Point point = (Point) o;

            if (x != point.x) return false;
            return y == point.y;
        }

        @Override
        public int hashCode() {
            int result = x;
            result = 31 * result + y;
            return result;
        }

        @Override
        public String toString() {
            return "(" + x + "," + y +')';
        }
    }
}