#include <iostream>
#include <cstring>
using namespace std;

char sheet[10][10];
char buf[12][10][10];
int ans[12][3];
int sum;

inline bool check(int x, int y, int s) {
  if (!sheet[y][x] || !sheet[y][x+1] || !sheet[y+1][x] || !sheet[y][x-1] || !sheet[y-1][x]) return false;
  if (!s) return true;
  if (!sheet[y+1][x+1] || !sheet[y-1][x+1] || !sheet[y+1][x-1] || !sheet[y-1][x-1]) return false;
  if (s==1) return true;
  if (!sheet[y][x+2] || !sheet[y+2][x] || !sheet[y][x-2] || !sheet[y-2][x]) return false;
  return true;
}

inline void absorb(int x, int y, int s) {
  --sheet[y][x];
  --sheet[y][x+1];
  --sheet[y+1][x];
  --sheet[y][x-1];
  --sheet[y-1][x];
  if (!s) return;
  --sheet[y+1][x+1];
  --sheet[y-1][x+1];
  --sheet[y+1][x-1];
  --sheet[y-1][x-1];
  if (s==1) return;
  --sheet[y][x+2];
  --sheet[y+2][x];
  --sheet[y][x-2];
  --sheet[y-2][x];
}

bool dfs(int x, int y, int s, int n) {
  bool r = false;
  char ds, w;
  if (!s) {
    ds = 5;
    w = 1;
  } else if (s==1) {
    ds = 9;
    w = 1;
  } else {
    ds = 13;
    w = 2;
  }

  if (check(x, y, s)) {
    ans[n][0] = x;
    ans[n][1] = y;
    ans[n][2] = s+1;
    memcpy(&buf[n][0][0], sheet, sizeof(char)*100);
    absorb(x, y, s);
    sum -= ds;
    if (!n) r = !sum;
    else r = dfs(x, y, s, n-1);
    if (r) return r;
    memcpy(sheet, &buf[n][0][0], sizeof(char)*100);
    sum += ds;
  }
  if (x<9-w) {
    r = dfs(x+1, y, s, n);
  } else if (y<9-w) {
    r = dfs(w, y+1, s, n);
  } else if (s) {
    r = dfs(1, 1, s-1, n);
  }
  return r;
}

int main() {
  int m, t;
  sum = 0;
  cin >> m;
  for (int i=0; i<10; i++) {
    for (int j=0; j<10; j++) {
      cin >> t;
      sum += t;
      sheet[i][j] = (char)t;
    }
  }
  dfs(2, 2, 2, m-1);
  for (int i=0; i<m; i++) {
    cout << ans[i][0] << " " << ans[i][1] << " " << ans[i][2] << endl;
  }
}