#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
double dp[6][6][6][6][6][6][6][6][6];
bool vis[6][6][6][6][6][6][6][6][6];
vector<char> vv[10];
double d(int w1,int w2,int w3,int w4,int w5,int w6,int w7,int w8,int w9)
{
if(vis[w1][w2][w3][w4][w5][w6][w7][w8][w9])
return dp[w1][w2][w3][w4][w5][w6][w7][w8][w9];
vis[w1][w2][w3][w4][w5][w6][w7][w8][w9]=1;
int a[10]= {w1,w2,w3,w4,w5,w6,w7,w8,w9};
double &x=dp[w1][w2][w3][w4][w5][w6][w7][w8][w9];
int flag=0;
for(int i=0; i<9; i++)
{
if(a[i]!=0) flag=1;
}
if(flag==0) return x=1.0;
else
{
int kk=0;
for(int i=0; i<9; i++)
if(a[i])
{
for(int j=i+1; j<9; j++)
{
if(a[j]&&vv[i+1][a[i]-1]==vv[j+1][a[j]-1])
{
kk++;
a[i]--;
a[j]--;
x+=d(a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);
a[i]++;
a[j]++;
}
}
}
if(x==0) return 0;
else
{
x=x/(kk*1.0);
return x;
}
}
}
void init()
{
memset(dp,0,sizeof(dp));
memset(vis,0,sizeof(vis));
for(int i=0;i<=10;i++)
vv[i].clear();
}
char s1[5],s2[5],s3[5],s4[5];
int main()
{
while(~scanf("%s%s%s%s",&s1,&s2,&s3,&s4))
{
init();
vv[1].push_back(s1[0]);
vv[1].push_back(s2[0]);
vv[1].push_back(s3[0]);
vv[1].push_back(s4[0]);
for(int i=2; i<=9; i++)
{
scanf("%s%s%s%s",&s1,&s2,&s3,&s4);
vv[i].push_back(s1[0]);
vv[i].push_back(s2[0]);
vv[i].push_back(s3[0]);
vv[i].push_back(s4[0]);
}
double mm=d(4,4,4,4,4,4,4,4,4);
printf("%lf\n",mm);
}
return 0;
}