#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
int bx, by, ex, ey;
bool visit[8][8];
int dir[8][2]={-1,-2,-2,-1,-2,1,-1,2,1,2,2,1,2,-1,1,-2};
struct node{
int x, y, step;
};
bool right(int x, int y){
if(x<0 || y<0 || x>=8 || y>=8)
return false;
if(visit[x][y])
return false;
return true;
}
int bfs(){
node now, next;
now.x=bx; now.y=by; now.step=0;
queue<node> q;
q.push(now);
visit[now.x][now.y]=1;
while(!q.empty()){
now = q.front();
q.pop();
if(now.x==ex&&now.y==ey){
return now.step;
}
for(int i = 0; i < 8; i++){
next.x = now.x+dir[i][0];
next.y = now.y+dir[i][1];
next.step = now.step+1;
if(right(next.x,next.y)){
q.push(next);
visit[next.x][next.y]=true;
}
}
}
}
int main(){
char a[2], b[2];
while(~scanf("%s %s", a, b)){
bx =a[0]-'a';
by = a[1]-'1';
ex = b[0]-'a';
ey = b[1]-'1';
memset(visit,0, sizeof(visit));
printf("To get from %s to %s takes %d knight moves.\n",a,b,bfs());
}
return 0;
}