#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
int ans;
int data[10][10],visit[10][10];
struct Node{
int x,y;
Node(int a,int b):x(a),y(b){
}
Node(){
x = -1;
y = -1;
}
};
Node pre[10][10];
queue<Node>q;
bool bfs(Node node){
q.push(node);
while(!q.empty()){
int x = q.front().x;
int y = q.front().y;
Node u(x,y);
q.pop();
if(data[x][y]==-2){
while(!q.empty())
q.pop();
return true;
}
else{
if(x-1>=1&&y-2>=1&&visit[x-1][y-2]==0){
q.push(Node(x-1,y-2));
visit[x-1][y-2] = 1;
pre[x-1][y-2] = u;
}
if(x-1>=1&&y+2<=8&&visit[x-1][y+2]==0){
q.push(Node(x-1,y+2));
visit[x-1][y+2] = 1;
pre[x-1][y+2] = u;
}
if(x-2>=1&&y-1>=1&&visit[x-2][y-1]==0){
q.push(Node(x-2,y-1));
visit[x-2][y-1] = 1;
pre[x-2][y-1] = u;
}
if(x-2>=1&&y+1<=8&&visit[x-2][y+1]==0){
q.push(Node(x-2,y+1));
visit[x-2][y+1] = 1;
pre[x-2][y+1] = u;
}
if(x+1<=8&&y-2>=1&&visit[x+1][y-2]==0){
q.push(Node(x+1,y-2));
visit[x+1][y-2] = 1;
pre[x+1][y-2] = u;
}
if(x+1<=8&&y+2<=8&&visit[x+1][y+2]==0){
q.push(Node(x+1,y+2));
visit[x+1][y+2] = 1;
pre[x+1][y+2] = u;
}
if(x+2<=8&&y-1>=1&&visit[x+2][y-1]==0){
q.push(Node(x+2,y-1));
visit[x+2][y-1] = 1;
pre[x+2][y-1] = u;
}
if(x+2<=8&&y+1<=8&&visit[x+2][y+1]==0){
q.push(Node(x+2,y+1));
visit[x+2][y+1] = 1;
pre[x+2][y+1] = u;
}
}
}
}
int main(){
char a[5],b[5];
while(scanf("%s%s",a,b)==2){
memset(data,0,sizeof data);
memset(visit,0,sizeof visit);
memset(pre,0,sizeof pre);
int x = a[0]-'a'+1;
int y = a[1]-'1'+1;
data[x][y] = -1;
int p = b[0]-'a'+1;
int q = b[1]-'1'+1;
data[p][q] = -2;
visit[x][y] = 1;
Node node(x,y);
bfs(node);
ans = 0;
if(x==p&&y==q){
printf("To get from %s to %s takes 0 knight moves.\n",a,b);
continue;
}
while(true){
int tp = pre[p][q].x;
int tq = pre[p][q].y;
ans++;
if(data[tp][tq]==-1){
break;
}
p = tp;
q = tq;
}
printf("To get from %s to %s takes %d knight moves.\n",a,b,ans);
}
return 0;
}