/*
Antun Razum
XV. Gimnazija
Int Division
Contest 3
*/
#include <cstdio>
#include <cstring>
struct point
{
point(void):r(-1),s(-1)
{}
point(int
_r,int _s):r(_r),s(_s) {}
~point(void)
{}
void
operator=(point _p)
{
r=_p.r;
s=_p.s;
}
point
operator+(point _p) const
{
point r=(*this);
r.r+=_p.r;
r.s+=_p.s;
return r;
}
bool
valid(point z) const
{
if(r<0||r>=z.r||s<0||s>=z.s)
return 0;
return 1;
}
bool
operator==(point _p) const { return (r==_p.r&&s==_p.s); }
int r,s;
};
const int PN[2]={6,8},DN[2][2]={{2,2},{2,1}};
const point KOM[2][4][8]={
{
{point(1,0),point(0,0),point(0,2),point(1,2),point(0,1),point(1,1)},
{point(0,0),point(0,1),point(2,1),point(2,0),point(1,1),point(1,0)},
{point(0,1),point(1,1),point(1,-1),point(0,-1),point(1,0),point(0,0)},
{point(1,1),point(1,0),point(-1,0),point(-1,1),point(0,0),point(0,1)}
},
{
{point(1,0),point(0,0),point(0,2),point(1,2),point(0,1),point(1,1),point(2,2),point(2,1)},
{point(0,0),point(0,1),point(2,1),point(2,0),point(1,1),point(1,0),point(2,-1),point(1,-1)},
{point(0,1),point(1,1),point(1,-1),point(0,-1),point(1,0),point(0,0),point(-1,-1),point(-1,0)},
{point(1,1),point(1,0),point(-1,0),point(-1,1),point(0,0),point(0,1),point(-1,2),point(0,2)}
}
};
const point TPT[2][2]={
{point(-1,-1),point(1,-1)},
{point(-1,2),point(1,2)}
};
const point MP[4][2]={
{point(0,0),point(0,-1)},
{point(0,0),point(-1,0)},
{point(0,0),point(0,1)},
{point(0,0),point(1,0)}
};
void blokus(void);
int dot(point,point,int,int);
bool valid(point,int,int,point);
int main(void)
{
for(int
i=0;i<5;i++)
blokus();
}
void blokus(void)
{
char
r_in[100];
int
r,s,l1,l2;
scanf("%s%d%d",r_in,&l1,&l2);
r=9-(r_in[0]-'A');
s=(r_in[1]-'0'-1);
l1--;
l2--;
point
z(11,11),gp(r,s);
int u=0;
for(int
tpt=0;tpt<DN[0][l1];tpt++)
for(int tp=0;tp<2;tp++)
for(int rot=0;rot<4;rot++)
{
point
cr=gp+TPT[l1][tpt]+MP[rot][l2];
if(dot(gp,cr,tp,rot)==1&&valid(cr,tp,rot,z))
u++;
}
printf("%d\n",u);
}
int dot(point gp,point sp,int tp,int rot)
{
int r=0;
for(int
i=0;i<PN[0];i++)
for(int j=0;j<PN[tp];j++)
if(KOM[0][0][i]+gp==KOM[tp][rot][j]+sp)
{
r++;
break;
}
return r;
}
bool valid(point p,int tp,int rot,point z)
{
for(int
i=0;i<PN[tp];i++)
if(!(KOM[tp][rot][i]+p).valid(z))
return 0;
return 1;
}