#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <queue>
using namespace std;
int stx,sty,edx,edy;
int gr[405][405];
int dirx[8]={-2,-2,2,2,1,1,-1,-1};
int diry[8]={1,-1,1,-1,2,-2,2,-2};
int dx[4]={2,2,-2,-2};
int dy[4]={-2,2,2,-2};
int n;
int bfs()
{
queue<int> q;
int x,y;
//int visit[405][405];
//memset(visit,0,sizeof(visit));
int moveTyp=0,move;
int step=0,stepCount;
q.push(stx);q.push(sty);q.push(moveTyp);q.push(step);
if(gr[stx][sty]==1)
return -1;
else if(gr[edx][edy]==1)
return -1;
while(!q.empty())
{
x = q.front();q.pop();
y = q.front();q.pop();
moveTyp = q.front();q.pop();
stepCount = q.front();q.pop();
gr[x][y]=1;
if(x==edx && y==edy)
{
return stepCount;
}
if(moveTyp==0)
{
//move=1;//regular move
for(int i=0;i<8;i++)
{
if(x+dirx[i]>=1 && x+dirx[i]<=2*n && y+diry[i]>=1 && y+diry[i]<=2*n && gr[x+dirx[i]][y+diry[i]]==0)
{
q.push(x+dirx[i]);
q.push(y+diry[i]);
q.push(1);
q.push(stepCount+1);
}
}
//move=2//bishop
for(int i=0;i<4;i++)
{
if(x+dx[i]>=1 && x+dx[i]<=2*n && y+dy[i]>=1 && y+dy[i]<=2*n && gr[x+dx[i]][y+dy[i]]==0)
{
q.push(x+dx[i]);
q.push(y+dy[i]);
q.push(2);
q.push(stepCount+1);
}
}
//move=3//teleportation
if(2*n-x+1>=1 && 2*n-x+1<=2*n && gr[2*n-x+1][y]==0)
{
q.push(2*n-x+1);
q.push(y);
q.push(3);
q.push(stepCount+1);
}
if(2*n-y+1>=1 && 2*n-y+1<=2*n && gr[x][2*n-y+1]==0)
{
q.push(x);
q.push(2*n-y+1);
q.push(3);
q.push(stepCount+1);
}
}
else if(moveTyp==1)
{
//move=2//bishop
for(int i=0;i<4;i++)
{
if(x+dx[i]>=1 && x+dx[i]<=2*n && y+dy[i]>=1 && y+dy[i]<=2*n && gr[x+dx[i]][y+dy[i]]==0)
{
q.push(x+dx[i]);
q.push(y+dy[i]);
q.push(2);
q.push(stepCount+1);
}
}
//move=3//teleportation
if(2*n-x+1>=1 && 2*n-x+1<=2*n && gr[2*n-x+1][y]==0)
{
q.push(2*n-x+1);
q.push(y);
q.push(3);
q.push(stepCount+1);
}
if(2*n-y+1>=1 && 2*n-y+1<=2*n && gr[x][2*n-y+1]==0)
{
q.push(x);
q.push(2*n-y+1);
q.push(3);
q.push(stepCount+1);
}
}
else if(moveTyp==2)
{
//move=3//teleportation
if(2*n-x+1>=1 && 2*n-x+1<=2*n && gr[2*n-x+1][y]==0)
{
q.push(2*n-x+1);
q.push(y);
q.push(3);
q.push(stepCount+1);
}
if(2*n-y+1>=1 && 2*n-y+1<=2*n && gr[x][2*n-y+1]==0)
{
q.push(x);
q.push(2*n-y+1);
q.push(3);
q.push(stepCount+1);
}
//move=1;//regular move
for(int i=0;i<8;i++)
{
if(x+dirx[i]>=1 && x+dirx[i]<=2*n && y+diry[i]>=1 && y+diry[i]<=2*n && gr[x+dirx[i]][y+diry[i]]==0)
{
q.push(x+dirx[i]);
q.push(y+diry[i]);
q.push(1);
q.push(stepCount+1);
}
}
}
else if(moveTyp==3)
{
//move=1;//regular move
for(int i=0;i<8;i++)
{
if(x+dirx[i]>=1 && x+dirx[i]<=2*n && y+diry[i]>=1 && y+diry[i]<=2*n && gr[x+dirx[i]][y+diry[i]]==0)
{
q.push(x+dirx[i]);
q.push(y+diry[i]);
q.push(1);
q.push(stepCount+1);
}
}
//move=2//bishop
for(int i=0;i<4;i++)
{
if(x+dx[i]>=1 && x+dx[i]<=2*n && y+dy[i]>=1 && y+dy[i]<=2*n && gr[x+dx[i]][y+dy[i]]==0)
{
q.push(x+dx[i]);
q.push(y+dy[i]);
q.push(2);
q.push(stepCount+1);
}
}
}
}
return -1;
}
int main()
{
int a,b;
while(scanf("%d",&n),n)
{
scanf("%d%d",&stx,&sty);
scanf("%d%d",&edx,&edy);
memset(gr,0,sizeof(gr));
while(scanf("%d%d",&a,&b),a,b)
{
gr[a][b]=1;
}
int ret = bfs();
if(ret==-1)
{
printf("Solution doesn't exist\n");
}
else
printf("Result : %d\n",ret);
}
return 0;
}