#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;
}