#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <time.h>
#include <string>
#include <map>
#include <stack>
#include <vector>
#include <set>
#include <queue>
#define pi acos(-1.0)
#define inf 0x3f3f3f3f
using namespace std;
int n,m,flag,a,b;
int dis[8][2]= {-2,1,-1,2,1,2,2,1,2,-1,1,-2,-1,-2,-2,-1};
int vis[15][15];
int w[15][15];
string str;
struct man
{
int x,y,step;
};
queue<man>q;
void bfs(man s,int enx,int eny)
{
q.push(s);
vis[s.x][s.y]=1;
while(!q.empty())
{
man t=q.front();
q.pop();
//printf("%d %d %d\n",t.x,t.y,t.step);system("pause");
if(t.x==enx&&t.y==eny)
{
printf("%d moves\n",t.step);
flag=1;
return;
}
for(int i=0; i<8; i++)
{
int xx=t.x+dis[i][0];
int yy=t.y+dis[i][1];//
//printf("%d %d\n",xx,yy);
if(xx>=0&&xx<8&&yy>=0&&yy<8&&w[xx][yy]!=1&&vis[xx][yy]==0)
{
man k;
k.x=xx;
k.y=yy;
k.step=t.step+1;
q.push(k);
vis[xx][yy]=1;
}
}
}
}
int main()
{
int g,h;int cnt=0;
while(~scanf("%d",&n))
{cnt++;flag=0;
while(!q.empty())q.pop();
int enx;int eny;
if(n==-1)break;
memset(vis,0,sizeof(vis));
memset(w,0,sizeof(w));
while(n--)
{
cin>>str;
w[str[0]-‘a‘][str[1]-‘1‘]=1;
}
string sta,en;
cin>>sta>>en;
man s;s.x=sta[0]-‘a‘;s.y=sta[1]-‘1‘;s.step=0;q.push(s);
enx=en[0]-‘a‘;eny=en[1]-‘1‘;
printf("Board %d: ",cnt);
bfs(s,enx,eny);
if(flag==0)puts("not reachable");
}
return 0;
}