#include <bits/stdc++.h>
using namespace std;
int stp[ 9 ] [ 9 ] ;
string a, b;
struct Node{
int x,y;
} ;
int dx[ 8 ] = { - 2 ,- 2 ,- 1 ,- 1 ,1 ,1 ,2 ,2 } ;
int dy[ 8 ] = { - 1 ,1 ,- 2 ,2 ,- 2 ,2 ,- 1 ,1 } ;
deque< Node> dq;
int main( ) {
while ( cin >> a>> b ) {
for ( int i= 1 ; i<= 8 ; i++ ) {
for ( int j= 1 ; j<= 8 ; j++ )
stp[ i] [ j] = - 1 ;
}
// start
int x1= a[ 0 ] - 'a' + 1 ;
int y1= a[ 1 ] - '0' ;
// end
int x2= b[ 0 ] - 'a' + 1 ;
int y2= b[ 1 ] - '0' ;
stp[ x1] [ y1] = 0 ;
Node S;
S.x = x1; S.y = y1;
dq.push_back ( S) ;
if ( x1== x2 and y1== y2 ) {
cout << "To get from " << a<< " to " << b<< " takes " << 0 << " knight moves." << '\n ' ;
continue ;
}
while ( ! dq.empty ( ) ) {
Node now= dq.front ( ) ;
dq.pop_front ( ) ;
for ( int i= 0 ; i< 8 ; i++ ) {
int nxt_x= now.x + dx[ i] ;
int nxt_y= now.y + dy[ i] ;
if ( 1 <= nxt_x and nxt_x<= 8 and 1 <= nxt_y and nxt_y<= 8 ) {
if ( stp[ nxt_x] [ nxt_y] ! = - 1 )
continue ;
stp[ nxt_x] [ nxt_y] = stp[ now.x ] [ now.y ] + 1 ;
Node nxt;
nxt.x = nxt_x; nxt.y = nxt_y;
dq.push_back ( nxt) ;
if ( nxt_x== x2 and nxt_y== y2 )
cout << "To get from " << a<< " to " << b<< " takes " << stp[ nxt_x] [ nxt_y] << " knight moves." << '\n ' ;
}
}
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgc3RwWzldWzldOwoKc3RyaW5nIGEsIGI7CgpzdHJ1Y3QgTm9kZXsKCWludCB4LHk7Cn07CmludCBkeFs4XT17LTIsLTIsLTEsLTEsMSwxLDIsMn07CmludCBkeVs4XT17LTEsMSwtMiwyLC0yLDIsLTEsMX07CgpkZXF1ZTxOb2RlPiBkcTsKCmludCBtYWluKCkgewoJd2hpbGUoIGNpbj4+YT4+YiApewoJCWZvcihpbnQgaT0xO2k8PTg7aSsrKXsKCQkJZm9yKGludCBqPTE7ajw9ODtqKyspCgkJCQlzdHBbaV1bal09LTE7CgkJfQoJCS8vIHN0YXJ0CgkJaW50IHgxPWFbMF0tJ2EnKzE7CgkJaW50IHkxPWFbMV0tJzAnOwoJCS8vIGVuZAoJCWludCB4Mj1iWzBdLSdhJysxOwoJCWludCB5Mj1iWzFdLScwJzsKCQkKCQlzdHBbeDFdW3kxXT0wOwoJCQoJCU5vZGUgUzsKCQlTLng9eDE7IFMueT15MTsKCQlkcS5wdXNoX2JhY2soUyk7CgkJaWYoIHgxPT14MiBhbmQgeTE9PXkyICl7CgkJCWNvdXQ8PCJUbyBnZXQgZnJvbSAiPDxhPDwiIHRvICI8PGI8PCIgdGFrZXMgIjw8MDw8IiBrbmlnaHQgbW92ZXMuIjw8J1xuJzsKCQkJY29udGludWU7CgkJfQkKCQkKCQl3aGlsZSggIWRxLmVtcHR5KCkgKXsKCQkJTm9kZSBub3c9ZHEuZnJvbnQoKTsKCQkJZHEucG9wX2Zyb250KCk7CgkJCQoJCQlmb3IoaW50IGk9MDtpPDg7aSsrKXsKCQkJCWludCBueHRfeD1ub3cueCtkeFtpXTsKCQkJCWludCBueHRfeT1ub3cueStkeVtpXTsKCQkJCWlmKCAxPD1ueHRfeCBhbmQgbnh0X3g8PTggYW5kIDE8PW54dF95IGFuZCBueHRfeTw9OCApewoJCQkJCWlmKCBzdHBbbnh0X3hdW254dF95XSE9LTEgKQoJCQkJCQljb250aW51ZTsKCQkJCQlzdHBbbnh0X3hdW254dF95XT1zdHBbbm93LnhdW25vdy55XSsxOwoJCQkJCU5vZGUgbnh0OwoJCQkJCW54dC54PW54dF94OyBueHQueT1ueHRfeTsKCQkJCQlkcS5wdXNoX2JhY2sobnh0KTsKCQkJCQlpZiggbnh0X3g9PXgyIGFuZCBueHRfeT09eTIgKQoJCQkJCQljb3V0PDwiVG8gZ2V0IGZyb20gIjw8YTw8IiB0byAiPDxiPDwiIHRha2VzICI8PHN0cFtueHRfeF1bbnh0X3ldPDwiIGtuaWdodCBtb3Zlcy4iPDwnXG4nOwoJCQkJfQoJCQl9CgkJfQkJCgkJCgl9Cn0=