/*
ID: niepeng1
PROG: wissqu
LANG: C++
*/
#include<iostream>
#include<memory.h>
using namespace std;
struct node
{
int x;
int y;
char ch;
}list[17];
int left1[5]={3,3,3,4,3},i,j,ans;
bool set[6][6],fi;
char a[6][6];
bool can(char ch,int i,int j)
{
if(a[i-1][j-1]==ch || a[i-1][j]==ch || a[i-1][j+1]==ch || a[i][j-1]==ch || a[i][j+1]==ch
|| a[i+1][j-1]==ch || a[i+1][j]==ch || a[i+1][j+1]==ch)
{
return false;
}
return true;
}
void oper(char ch,int ti)
{
int i,j,k;
char tem;
left1[ch-'A']--;
for(i=1;i<=4;i++)
for(j=1;j<=4;j++)
{
if(!set[i][j] && a[i][j]!=ch&&can(ch,i,j))
{
tem=a[i][j];
set[i][j]=true;
list[ti].ch=ch;list[ti].x=i;list[ti].y=j;
a[i][j]=ch;
if(ti==16)
{
if(fi)
{
for(k=1;k<=16;k++)
printf("%c %d %d/n",list[k].ch,list[k].x,list[k].y);
fi=false;
}
ans++;
}
else
for(k=0;k<5;k++)
if(left1[k])
oper(k+'A',ti+1);
set[i][j]=false;
a[i][j]=tem;
}
}
left1[ch-'A']++;
}
int main()
{
freopen("wissqu.in","r",stdin);
freopen("wissqu.out","w",stdout);
memset(a,0,sizeof(a));
memset(set,false,sizeof(set));
for (i=1;i<=4;i++)
{
for (j=1;j<=4;j++)
scanf("%c",&a[i][j]);
getchar();
}
ans=0;fi=true;
oper('D',1);
printf("%d/n",ans);
return 0;
}