#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; }