rt
#include <cstring>
#include <string>
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <stack>
#include <queue>
#include <limits.h>
#include <list>
#include <set>
#include <map>
#include <unordered_map>
using namespace std;
#define min(a,b) ((a)>(b)?(b):(a))
#define max(a,b) ((a)<(b)?(b):(a))
#define INF 0x3f3f3f3f
#define ll long long
#define sc scanf
#define pr printf
#define v1 first
#define v2 second
#define f(nm1,nm2,nm3) for(int nm1=nm2; nm1<= nm3; nm1++)
#define lowbit(x) (x&(-x))
//int a[10][10];
void drop(int a[10][10])
{
for(int i=6; i>= 1; i--)
{
for(int j=1; j <= 5; j++)
{
if(a[i][j]==0&&a[i+1][j]>0)
{
swap(a[i][j],a[i+1][j]);
}
}
}
}
bool b[10][10];
void clr(int a[10][10])
{
drop(a);
memset(b,0,sizeof(b));
for(int i=1; i <= 7; i++)
{
for(int j=1; j <= 3; j++)
{
if(a[i][j]==a[i][j+1]&&a[i][j+1]==a[i][j+2]&&a[i][j]>0)
{
b[i][j]=1;
b[i][j+1]=1;
b[i][j+2]=1;
}
}
}
for(int j=1; j <= 5; j++)
{
for(int i=1; i <= 5; i++)
{
if(a[i][j]==a[i+1][j]&&a[i+1][j]==a[i+2][j]&&a[i][j]>0)
{
b[i][j]=1;
b[i+1][j]=1;
b[i+2][j]=1;
}
}
}
bool ok=0;
for(int i=1; i <= 7; i++)
{
for(int j=1; j <= 5; j ++)
{
if(b[i][j])
{
ok=1;
a[i][j]=0;
}
}
}
drop(a);
if(ok)
clr(a);
}
bool emp(int a[10][10])
{
for(int i=1; i <= 7;i++)
{
for(int j=1; j <= 5; j++)
{
if(a[i][j])
return 0;
}
}
return 1;
}
void dfs(int k,int d,int a[10][10],stack<pair<pair<int,int>,int>> q)
{
int rep[10][10];
for(int i=1;i <= 7; i++)
{
for(int j=1; j <= 5; j++)
{
rep[i][j]=a[i][j];
}
}
clr(rep);
if(k>d)
{
if(emp(rep))
{
stack<pair<pair<int,int>,int>> st2;
while(!q.empty())
{
st2.push(q.top());
q.pop();
}
while(!st2.empty())
{
pr("%d %d %d\n",st2.top().v1.v2-1,st2.top().v1.v1-1,st2.top().v2);
st2.pop();
}
exit(0);
}
return;
}
for(int i=1; i <= 7; i++)
{
for(int j=1; j <= 4; j++)
{
if(rep[i][j]!=rep[i][j+1])
{
swap(rep[i][j],rep[i][j+1]);
if(rep[i][j]!=0){
q.push({{i,j},1});
}
else
{
q.push({{i,j+1},-1});
}
dfs(k+1,d,rep,q);
q.pop();
swap(rep[i][j],rep[i][j+1]);
}
}
}
}
int n;
int a[10][10];
signed main() {
sc("%d",&n);
for(int i=1; i <= 5; i++)
{
int x,j=0;
while(cin>> x)
{
j++;
if(x==0)
break;
a[j][i]=x;
}
}
stack<pair<pair<int,int>,int>> q;
n++;
for(int i=1; i <= n; i++)
{
dfs(1,i,a,q);
}
pr("-1");
// clr(a);
// for(int i=1; i <= 7; i++)
// {
// for(int j=1; j <= 5; j++)
// {
// pr("%d ",a[i][j]);
// }
// pr("\n");
// }
return 0;
}
/*
0
1 0
1 1 1 2 0
1 2 2 0
2 2 0
*/