#include <iostream>
//#include <queue>
using namespace std;
// queue <code> myqueue;
int flag[64][8][8];
int shore[64];
char encode[64];
int count = 0;
bool charge (int a, int b)
{
if (a >= 0 && b >= 0 && a < 8 && b < 8)
return true ;
else
return false;
}
void init (int c , int a , int b )
{
flag[c][a][b] = count;
if ((flag[c][a][b]==0) && charge(a , b))
{
init (c, a-1, b-2);
init (c, a-2, b-1);
init (c, a-2, b+1);
init (c, a-1, b+2);
init (c, a+1, b-2);
init (c, a+2, b-1);
init (c, a+2, b+1);
init (c, a+1, b+2);
count++;
}
}
void initk (int c , int a , int b )
{
flag[c][a][b] = count;
if ((flag[c][a][b]==0) && charge(a , b))
{
initk (c, a-1, b-1);
initk (c, a-1, b);
initk (c, a-1, b+1);
initk (c, a, b-1);
initk (c, a, b+1);
initk (c, a+1, b-1);
initk (c, a+1, b);
initk (c, a+1, b+1);
count++;
}
}
int main ()
{
int i,j,k;
memset(flag, 0, sizeof (flag));
memset(shore,0,sizeof(shore));
gets (encode);
int figures = strlen(encode) / 2;
for (i = 0 ; i < figures ; i++)
{
int a = encode[2*i] - 'A';
int b = encode[2*i+1] - '1';
int c = a + b ;
shore[i] = c ;
count = 0;
if (i == 0) initk (c, a, b);
else init(c, a, b);
}
int sum = 999;
for (i = 0; i < 8 ;i++)
for (j = 0;j < 8;j++)
{
int temp = 0;
for (k = 0 ; k< figures; k++)
{
temp += flag[i][j][k];
}
if (temp < sum)
sum = temp;
}
cout << sum << endl;
return 0;
}