#include <vector>
#include <set>
#include <cstdio>
#include <cstdlib>
using namespace std;

const vector<pair<
	int,
	vector<vector<int>>
>>pattern={
	{13,{
		{0,0,1,0,0},
		{0,1,1,1,0},
		{1,1,1,1,1},
		{0,1,1,1,0},
		{0,0,1,0,0},
	}},
	{9,{
		{1,1,1},
		{1,1,1},
		{1,1,1},
	}},
	{5,{
		{0,1,0},
		{1,1,1},
		{0,1,0},
	}},
};

vector<vector<int>>m(10);
set<vector<vector<int>>>se;
void dfs(vector<pair<pair<int,int>,int>> &v,int s){
	if(s==0){
		for(auto &e:v)printf("%d %d %d\n",e.first.first,e.first.second,e.second);
		exit(0);
	}
	if(se.find(m)!=se.end())return;
	int cnt=0;
	for(auto &pat:pattern){if(s>=pat.first){
		for(int y=0;y<=10-pat.second.size();y++){
			for(int x=0;x<=10-pat.second[0].size();x++){
				for(int dy=0;dy<pat.second.size();dy++){
					for(int dx=0;dx<pat.second[0].size();dx++){
						if(m[y+dy][x+dx]<pat.second[dy][dx])goto fail;
					}
				}
				for(int dy=0;dy<pat.second.size();dy++){
					for(int dx=0;dx<pat.second[0].size();dx++){
						m[y+dy][x+dx]-=pat.second[dy][dx];
					}
				}
				v.push_back(make_pair(make_pair(x+pat.second[0].size()/2,y+pat.second.size()/2),pattern.size()-cnt));
				dfs(v,s-pat.first);
				v.pop_back();
				for(int dy=0;dy<pat.second.size();dy++){
					for(int dx=0;dx<pat.second[0].size();dx++){
						m[y+dy][x+dx]+=pat.second[dy][dx];
					}
				}
				fail:;
			}
		}
	}cnt++;}
	se.insert(m);
}

int main(){
	int N,y,x,s=0;
	scanf("%d",&N);
	for(y=0;y<10;y++){
		m[y].resize(10);
		for(x=0;x<10;x++)scanf("%d",&m[y][x]),s+=m[y][x];
	}
	vector<pair<pair<int,int>,int>> v;
	dfs(v,s);
}