#include <iostream> 
#include <algorithm>
#include <vector>
#include <map>

using namespace std;

static const int N = 10;

int n, data[N][N];
vector<pair<int, int> > vis;
int size[3] = {5, 9, 13};
int cen[3] = {N, N+1, 2*N};
int dx[3][13] = {
  {0, -1, 0, 1, 0},
  {0, 1, 2, 0, 1, 2, 0, 1, 2},
  {0, -1, 0, 1, -2, -1, 0, 1, 2, -1, 0, 1, 0}
};
int dy[3][13] = {
  {0, 1, 1, 1, 2},
  {0, 0, 0, 1, 1, 1, 2, 2, 2},
  {0, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4}
};

bool check(int p, int s){
  for(int i=0;i<size[s];i++){
    int ny = p / N + dy[s][i];
    int nx = p % N + dx[s][i];
    if(ny < 0 || ny >= N) return false;
    if(nx < 0 || nx >= N) return false;
    if(data[ny][nx] == 0) return false;
  }
  return true;
}

void put(int p, int s, int x){
  for(int i=0;i<size[s];i++){
    int ny = p / N + dy[s][i];
    int nx = p % N + dx[s][i];
    data[ny][nx] += x;
  }
}

bool solve(int p, int cnt){
  if(cnt == n){
    bool res = true;
    for(int i=0;i<N;i++) for(int j=0;j<N;j++) if(data[i][j] != 0) res = false;
    if(res){
      for(int i=0;i<vis.size();i++){
	cout << vis[i].first % N << ' ' << vis[i].first / N << ' ' << vis[i].second + 1 << endl;
      }
    }
    return res;
  }
  for(;p<N*N;p++){
    if(data[p/N][p%N] > 0){
      for(int i=0;i<3;i++){
	if(check(p, i)){
	  put(p, i, -1);
	  vis.push_back(make_pair(p+cen[i], i));
	  solve(p, cnt+1);
	  vis.pop_back();
	  put(p, i, 1);
	}
      }
    }
  }
  return false;
}

int main(){
  cin >> n;
  for(int i=0;i<N;i++) for(int j=0;j<N;j++) cin >> data[i][j];
  solve(0, 0);
  return 0;
}