#include<bits/stdc++.h>
using namespace std;
#define FR0(i,N) for(i=0;i<(N);i++)
#define FR1(i,N) for(i=1;i<=(N);i++)
#define FRN(i,k,N) for(i=k;i<(N);i++)
#define pf printf
#define db double
#define max3(a,b,c) max(max(a,b),c)
#define min3(a,b,c) min(min(a,b),c)
#define sci(n) scanf("%d",&n)
#define scl(n) scanf("%lld",&n)
#define scf(n) scanf("%f",&n)
#define scd(n) scanf("%lf",&n)
#define scs(s) scanf("%s",&s)
#define scll(n) scanf("%%I64d",&n)
#define PI acos(-1.0)
#define LL long long
#define MX 1000005
#define MOD 1000000007
typedef long long int ll;
bool status[ 1100002 ] ;
//int start_row,start_col,end_row,end_col;
int cost[ 100 ] [ 100 ] ;
int check[ 100 ] [ 100 ] ;
queue< int > Q;
int dr[ ] = { + 2 ,- 2 ,+ 2 ,- 2 ,+ 1 ,- 1 ,+ 1 ,- 1 } ;
int dc[ ] = { + 1 ,+ 1 ,- 1 ,- 1 ,+ 2 ,+ 2 ,- 2 ,- 2 } ;
//int dr[]= {-2,-2,+2,+2,+1,-1,+1,-1};
//int dc[]= {+1,-1,+1,-1,-2,-2,+2,+2};
//queue<int>Q;
int start_row,start_col,end_row,end_col;
void BFS( int r,int c)
{
check[ r] [ c] = 1 ;
cost[ r] [ c] = 0 ;
Q.push ( r) ;
Q.push ( c) ;
while ( ! Q.empty ( ) )
{
int u= Q.front ( ) ;
Q.pop ( ) ;
int v= Q.front ( ) ;
Q.pop ( ) ;
for ( int i= 0 ; i< 8 ; i++ )
{
int row= dr[ i] + u;
int col= dc[ i] + v;
if ( ( ( row>= 0 && row< 8 ) && ( col>= 0 && col< 8 ) ) && ( check[ row] [ col] == 0 ) )
{
check[ row] [ col] = 1 ;
cost[ row] [ col] = cost[ u] [ v] + 1 ;
Q.push ( row) ;
Q.push ( col) ;
}
}
}
}
int main( )
{
string s1,s2;
while ( cin >> s1>> s2)
{
start_row= s1[ 0 ] - 96 ;
start_col= s1[ 1 ] - '0' ;
end_row= s2[ 0 ] - 96 ;
end_col= s2[ 1 ] - '0' ;
memset ( cost,0 ,sizeof ( cost) ) ;
memset ( check,0 ,sizeof ( check) ) ;
BFS( start_row- 1 ,start_col- 1 ) ;
cout << "To get from " << s1<< " to " << s2<< " takes " << cost[ end_row- 1 ] [ end_col- 1 ] << " knight moves." << endl;
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBGUjAoaSxOKSBmb3IoaT0wO2k8KE4pO2krKykKI2RlZmluZSBGUjEoaSxOKSBmb3IoaT0xO2k8PShOKTtpKyspCiNkZWZpbmUgRlJOKGksayxOKSBmb3IoaT1rO2k8KE4pO2krKykKI2RlZmluZSBwZiBwcmludGYKI2RlZmluZSBkYiBkb3VibGUKI2RlZmluZSBtYXgzKGEsYixjKSBtYXgobWF4KGEsYiksYykKI2RlZmluZSBtaW4zKGEsYixjKSBtaW4obWluKGEsYiksYykKI2RlZmluZSBzY2kobikgc2NhbmYoIiVkIiwmbikKI2RlZmluZSBzY2wobikgc2NhbmYoIiVsbGQiLCZuKQojZGVmaW5lIHNjZihuKSBzY2FuZigiJWYiLCZuKQojZGVmaW5lIHNjZChuKSBzY2FuZigiJWxmIiwmbikKI2RlZmluZSBzY3Mocykgc2NhbmYoIiVzIiwmcykKI2RlZmluZSBzY2xsKG4pIHNjYW5mKCIlJUk2NGQiLCZuKQojZGVmaW5lIFBJIGFjb3MoLTEuMCkKI2RlZmluZSBMTCBsb25nIGxvbmcKI2RlZmluZSBNWCAxMDAwMDA1CiNkZWZpbmUgTU9EIDEwMDAwMDAwMDcKdHlwZWRlZiBsb25nIGxvbmcgaW50IGxsOwpib29sIHN0YXR1c1sxMTAwMDAyXTsKLy9pbnQgc3RhcnRfcm93LHN0YXJ0X2NvbCxlbmRfcm93LGVuZF9jb2w7CmludCBjb3N0WzEwMF1bMTAwXTsKaW50IGNoZWNrWzEwMF1bMTAwXTsKcXVldWU8aW50PlE7CmludCBkcltdPXsrMiwtMiwrMiwtMiwrMSwtMSwrMSwtMX07CmludCBkY1tdPXsrMSwrMSwtMSwtMSwrMiwrMiwtMiwtMn07Ci8vaW50IGRyW109IHstMiwtMiwrMiwrMiwrMSwtMSwrMSwtMX07Ci8vaW50IGRjW109IHsrMSwtMSwrMSwtMSwtMiwtMiwrMiwrMn07Ci8vcXVldWU8aW50PlE7CmludCBzdGFydF9yb3csc3RhcnRfY29sLGVuZF9yb3csZW5kX2NvbDsKdm9pZCBCRlMoaW50IHIsaW50IGMpCnsKICAgIGNoZWNrW3JdW2NdPTE7CiAgICBjb3N0W3JdW2NdPTA7CiAgICBRLnB1c2gocik7CiAgICBRLnB1c2goYyk7CiAgICB3aGlsZSghUS5lbXB0eSgpKQogICAgewogICAgICAgIGludCB1PVEuZnJvbnQoKTsKICAgICAgICBRLnBvcCgpOwogICAgICAgIGludCB2PVEuZnJvbnQoKTsKICAgICAgICBRLnBvcCgpOwogICAgICAgIGZvcihpbnQgaT0wO2k8ODtpKyspCiAgICAgICAgewogICAgICAgICAgICBpbnQgcm93PWRyW2ldK3U7CiAgICAgICAgICAgIGludCBjb2w9ZGNbaV0rdjsKICAgICAgICAgICAgaWYoKChyb3c+PTAgJiYgcm93PDgpJiYoY29sPj0wICYmIGNvbDw4KSkgJiYoY2hlY2tbcm93XVtjb2xdPT0wKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2hlY2tbcm93XVtjb2xdPTE7CiAgICAgICAgICAgICAgICBjb3N0W3Jvd11bY29sXT1jb3N0W3VdW3ZdKzE7CiAgICAgICAgICAgICAgICBRLnB1c2gocm93KTsKICAgICAgICAgICAgICAgIFEucHVzaChjb2wpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CmludCBtYWluKCkKewogICAgc3RyaW5nIHMxLHMyOwogICAgd2hpbGUoY2luPj5zMT4+czIpCiAgICB7CiAgICAgIHN0YXJ0X3Jvdz1zMVswXS05NjsKICAgICAgc3RhcnRfY29sPXMxWzFdLScwJzsKICAgICAgZW5kX3Jvdz1zMlswXS05NjsKICAgICAgZW5kX2NvbD1zMlsxXS0nMCc7CiAgICAgIG1lbXNldChjb3N0LDAsc2l6ZW9mKGNvc3QpKTsKICAgICAgbWVtc2V0KGNoZWNrLDAsc2l6ZW9mKGNoZWNrKSk7CiAgICAgIEJGUyhzdGFydF9yb3ctMSxzdGFydF9jb2wtMSk7CiAgICAgIGNvdXQ8PCJUbyBnZXQgZnJvbSAiPDxzMTw8IiB0byAiPDxzMjw8IiB0YWtlcyAiPDxjb3N0W2VuZF9yb3ctMV1bZW5kX2NvbC0xXTw8IiBrbmlnaHQgbW92ZXMuIjw8ZW5kbDsKICAgIH0KfQo=