#include <fstream>
using namespace std;
ifstream f("Traseu.in");
ofstream g("Traseu.out");
int N,M,k1,l1,c1,k2,l2,c2,x,y,z,k,l,c,a[100][100][100],n,T;
int o,prim,ultim;
int dk[]={-1,0,0,0,0,1};
int dl[]={0,-1,0,0,1,0};
int dc[]={0,0,-1,1,0,0};
struct punct
{
short ki,li,ci;
}
B[1000000];
void lee()
{
punct p,v;
prim=ultim=0;
B[0].ki=k1;
B[0].li=l1;
B[0].ci=c1;
a[k1][l1][c1]=1;
while(prim<=ultim && a[k2][l2][c2]==0)
{
p=B[prim];
prim++;
for(o=0;o<6;o++)
{
v.ki=p.ki+dk[o];
v.li=p.li+dl[o];
v.ci=p.ci+dc[o];
if(a[v.ki][v.li][v.ci]==0)
{
ultim++;
a[v.ki][v.li][v.ci]=a[p.ki][p.li][p.ci]+1;
B[ultim]=v;
}
}
}
}
void bordare()
{
int i,j;
for(i=0;i<=N+1;i++)
for(j=0;j<=N+1;j++)
{
a[0][i][j]=-1;
a[n+1][i][j]=-1;
a[i][0][j]=-1;
a[i][n+1][j]=-1;
a[i][j][0]=-1;
a[i][j][n+1]=-1;
}
}
void drum(int x, int y, int z, int val)
{
if(val>1)
{
if (a[x-1][y][z]==val-1)
drum(x-1,y,z,val-1);
else
if (a[x][y-1][z]==val-1)
drum(x,y-1,z,val-1);
else
if (a[x][y][z-1]==val-1)
drum(x,y,z-1,val-1);
else
if (a[x][y][z+1]==val-1)
drum(x,y,z+1,val-1);
else
if (a[x][y+1][z]==val-1)
drum(x,y+1,z,val-1);
else
if (a[x+1][y][z]==val-1)
drum(x+1,y,z,val-1);
g<<x<<" "<<y<<" "<<z<<"\n";
}
}
int main()
{
f>>N>>M;
f>>k1>>l1>>c1;
f>>k2>>l2>>c2;
for(k=1;k<=N;k++)
for(l=1;l<=N;l++)
for(c=1;c<=N;c++)
a[k][l][c]=0;
for(n=1;n<=M;n++)
{
f>>x>>y>>z;
a[x][y][z]=-1;
}
bordare();
lee();
T=a[k2][l2][c2];
g<<T<<"\n";
g<<k1<<" "<<l1<<" "<<c1<<"\n";
drum(k2,l2,c2,T);
return 0;
}