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

using namespace std;

int n, m, check1 = 0, check2 = 0, check3 = 0;
vector<pair<int, int>> res;
vector<vector<int>> road;

bool findway(int row = 0, int col = 0)
{
    if (row == n - 1 && col == m - 1) {
        if ((check1 > 0 && check2 > 0) || (check2 > 0 && check3 > 0) || (check1 > 0 && check3 > 0)) {
            res.push_back(make_pair(n, m));
            return true;
        }
        return false;
    }
    // right
    if (col < m - 1 && road[row][col + 1] != -1) {
        res.push_back(make_pair(row + 1, col + 2));
        if (road[row][col + 1] == 1) ++check1;
        else if (road[row][col + 1] == 2) ++check2;
        else if (road[row][col + 1] == 3) ++check3;
        if (findway(row, col + 1))
            return true;
    }
    // down
    if (row < n - 1 && road[row + 1][col] != -1) {
        res.push_back(make_pair(row + 2, col + 1));
        if (road[row][col + 1] == 1) ++check1;
        else if (road[row][col + 1] == 2) ++check2;
        else if (road[row][col + 1] == 3) ++check3;
        if (findway(row + 1, col))
            return true;
    }
    // backtrack
    if (road[row][col] == 1) --check1;
    else if (road[row][col] == 2) --check2;
    else if (road[row][col] == 3) --check3;
    res.pop_back();
    return false;
}

int main()
{
    cin >> n >> m;
    road.resize(n);
    res.push_back(make_pair(1, 1));
    for (int i = 0; i < n; ++i) {
        road[i].resize(m);
        for (int j = 0; j < m; ++j)
            cin >> road[i][j];
    }
    if (!findway()) cout << -1;
    else {
        int s = res.size();
        for (int i = 0; i < s; ++i)
            cout << res[i].first << " " << res[i].second << endl;
    }
    return 0;
}