#include<bits/stdc++.h>
using namespace std;
#define F(i,k,n) for (int i=k;i<=n;i++)
typedef long long ll;
const int N=10;
int n;
int chuan[N][N];
int X[N],Y[N],g[N];
bool pan[N][N];
map <string,bool> mp;
string chong(int c[N][N]){
string s="";
F(i,1,7){
F(j,1,5){
s+=char(c[i][j]+'0');
}
}
return s;
}
void change(int flag,int x,int y){
if (flag==1){
swap(chuan[x][y],chuan[x][y+1]);
}
else swap(chuan[x][y],chuan[x][y-1]);
}
void down(){
bool F=1;
while (F){
memset(pan,0,sizeof(pan));
F=0;
F(i,1,7){
F(j,1,3){
if (chuan[i][j]==chuan[i][j+1] && chuan[i][j+1]
==chuan[i][j+2] && chuan[i][j]!=0){
pan[i][j]=pan[i][j+1]=pan[i][j+2]=1;
F=1;
}
}
}
F(i,1,5){
F(j,1,5){
if (chuan[j][i]==chuan[j+1][i] && chuan[j+1][i]
==chuan[j+2][i] && chuan[j][i]!=0){
pan[j][i]=pan[j+1][i]=pan[j+2][i]=1;
F=1;
}
}
}
F(i,1,7){
F(j,1,5){
if (pan[i][j]) chuan[i][j]=0;
}
}
F(i,1,5){
int now=0;
F(j,1,7){
if (chuan[j][i]==0) break;
now=j;
}
F(j,now+1,7){
if (chuan[j][i]){
now++;
chuan[now][i]=chuan[j][i];
chuan[j][i]=0;
}
}
}
}
}
void dfs(int step){
if (step==n){
bool Flag=1;
F(i,1,7){
F(j,1,5) if (chuan[i][j]) Flag=0;
}
if (Flag==1){
F(i,0,n-1) cout<<Y[i]-1<<' '<<X[i]-1<<' '<<g[i]<<'\n';
exit(0);
}
return ;
}
int m[N][N];
F(j,1,5){
F(i,1,7){
if (chuan[i][j]==0) continue;
F(i2,1,7){
F(j2,1,5){
m[i2][j2]=chuan[i2][j2];
}
}
if (j>1){
X[step]=i;
Y[step]=j;
g[step]=1;
change(1,i,j);
down();
dfs(step+1);
F(i2,1,7) F(j2,1,5) chuan[i2][j2]=m[i2][j2];
}
if (j<5){
X[step]=i;
Y[step]=j;
g[step]=-1;
change(-1,i,j);
down();
dfs(step+1);
F(i2,1,7) F(j2,1,5) chuan[i2][j2]=m[i2][j2];
}
}
}
}
int main(){
cin>>n;
F(i,1,5){
int A;
F(j,1,N){
cin>>A;
if (!A) break;
chuan[j][i]=A;
}
}
dfs(0);
cout<<-1;
return 0;
}