#include <bits/stdc++.h>
using namespace std;
using m=int[6][8];
bool flag;
vector<tuple<int,int,int>>ans;
int a[6][8],n;
bool check(m a){
bool k=1;
for(int i=1;i<=5&&k;i++)k&=!a[i][1];
return k;
}
void clean(m a){
bool k=1;
while(k){
k=0;bool b[6][8]={};
for(int i=1;i<=5;i++)
for(int j=1;j<=7;j++)if(a[i][j]){
int lx=i,rx=i,ly=j,ry=j;
while(lx-1>=1&&a[lx-1][j]==a[lx][j])lx--;
while(rx+1<=5&&a[rx+1][j]==a[rx][j])rx++;
while(ly-1>=1&&a[i][ly-1]==a[i][ly])ly--;
while(ry+1<=7&&a[i][ry+1]==a[i][ry])ry++;
if(rx-lx+1>=3)for(;lx<=rx;lx++)b[lx][j]=1,k=1;
if(ry-ly+1>=3)for(;ly<=ry;ly++)b[i][ly]=1,k=1;
}
for(int i=1;i<=5;i++)
for(int j=1;j<=7;j++)if(b[i][j])a[i][j]=0;
for(int i=1;i<=5;i++)
for(int j=1;j<=7;j++)if(!a[i][j]){
int t=j;
while(t<=7&&!a[i][t])t++;
if(t>7)break;
for(int l=j;l+t-j<=7;l++)a[i][l]=a[i][l+t-j];
for(int l=8+j-t;l<=7;l++)a[i][l]=0;
}
}
}
void dfs(int now,m a){
if(now==n){
if(check(a)){
for(auto [a,b,c]:ans)printf("%d %d %d\n",a-1,b-1,c);
exit(0);
}
return;
}
m t;memcpy(t,a,sizeof(int)*6*8);
for(int i=1;i<=4;i++)
for(int j=1;j<=7;j++)if(a[i][j]&&a[i][j]^a[i+1][j])swap(a[i][j],a[i+1][j]),clean(a),ans.emplace_back(i,j,1),dfs(now+1,a),memcpy(a,t,sizeof(int)*6*8),ans.pop_back();
for(int i=2;i<=5;i++)
for(int j=1;j<=7;j++)if(a[i][j]&&!a[i-1][j])swap(a[i][j],a[i-1][j]),clean(a),ans.emplace_back(i,j,-1),dfs(now+1,a),memcpy(a,t,sizeof(int)*6*8),ans.pop_back();
}
int main(){
#ifndef ONLINE_JUDGE
#define FILE_OUTPUT
#ifdef FILE_OUTPUT
freopen("P1312.in","r",stdin);
freopen("P1312.out","w",stdout);
#endif
long long c1=clock();
#endif
scanf("%d",&n);
for(int i=1;i<=5;i++){
int k;
for(int j=1;j<=7;j++){
scanf("%d",&k);
if(!k)break;
a[i][j]=k;
}
}
// clean(a);
dfs(0,a);
puts("-1");
#ifndef ONLINE_JUDGE
//#define DEBUG
#ifdef DEBUG
freopen("CON","w",stdout);
#endif
puts("\n--------------------------------");
printf("Process exited after %g seconds with return value 0\n",(clock()-c1)/1000.0);
#ifdef DEBUG
system("pause");
#endif
#endif
return 0;
}