/*
#include <stdio.h>
int arr[102][102]={};
int arra[100]={};
int i,a,j,num=0,tem,m,n,k,x,y2,x1,y1,b;
int main()
{
scanf("%d %d %d",&m,&n,&k);
for(i=1;i<=k;i++){
scanf("%d %d %d %d",&x,&y2,&x1,&y1);
for(j=y2;j<y1;j++)
{
for(b=x;b<x1;b++)
{
arr[j][b]=1;
}
}
}
for(i=0;i<m;i++){
for(j=0;j<n;j++){
if(arr[i][j]==0){
num++;
dfs(i,j);
}
}
}
printf("%d\n",num);
for(i=1;i<=num;i++){
for(j=1;j<=num-i;j++){
if(arra[j]>arra[j+1]){
tem=arra[j];
arra[j]=arra[j+1];
arra[j+1]=tem;
}
}
}
for(i=1;i<=num;i++){
printf("%d ",arra[i]);
}
return 0;
}
*/
#include <stdio.h>
typedef struct
{
int x,y;
}piece;
int arr[1000][1000]={};
int queue[1000000]={};
piece horsey,target; // (horsey==knight)
int i,n,a,j,num=0,front=-1,back=-1;
void push(int x)
{
back++;
queue[back]=x;
}
int pop()
{
int tem;
if(front==back){
return 0;
}
else{
front++;
tem=queue[front];
return tem;
}
}
void bfs(int v,int y)
{
int w,a;
int p,q,b;
int x,z,c=0,d,e=0;
arr[v][y]=0;
push(v*10000+y);
for(q=1;front!=back;q++){
a=pop();
x=a/10000;
z=a%10000;
printf("%d %d ",x,z);
if(x==target.x&&z==target.y){
break;
}
if(q==1){
num++;
printf("\n");
}
else if(q==2){
c=back;
}
else if(front==c){
num++;
printf("\n");
c=back;
}
if(y-1>=1){
push((x+2)*10000+y-1);
e++;
}
push((x+2)*10000+y+1);
if(x-2>=1&&y-1>=1){
push((x-2)*10000+y-1);
e++;
}
if(x-2>=1){
push((x-2)*10000+y+1);
e++;
}
if(y-2>=1){
push((x+1)*10000+y-2);
e++;
}
push((x+1)*10000+y+2);
e++;
if(x-1>=1&&y-2>=1){
push((x-1)*10000+y-2);
e++;
}
if(x-1>=1){
push((x-1)*10000+y+2);
e++;
}
}
return ;
}
int main()
{
scanf("%d",&n);
scanf("%d %d",&horsey.x,&horsey.y);
scanf("%d %d",&target.x,&target.y);
bfs(horsey.x,horsey.y);
printf("%d",num);
return 0;
}



