#include<iostream>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<map>
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define md(a) a=(a%mod+mod)%mod
#define file(a) freopen(#a".in","r",stdin);freopen(#a".out","w",stdout)
const ll mod=998244353,mod2=1e9+7,S=64;const double eps=1e-7;
int To(char c){if(c=='R')return 1;if(c=='G')return 2;return 3;}
char Back(int x){if(x==1)return 'R';if(x==2)return 'G';return 'B';}
unordered_map<ll,double>dp;unordered_map<ll,bool>vst;double p[4];
namespace wcy
{
int n,a[55][3],v[55];
bool had(int i){if(!a[i][1])return 0;return (a[i][0]>0||a[i][2]>0);}
bool del(int i,int j)
{
if(j==1)return (a[i][0]>0&&a[i][1]>0&&a[i][2]>0);
return (a[i][j]>0&&a[i][1]>0);
}
int g(int i)
{
if(a[i][0]<=a[i][2])return a[i][0]*16+a[i][1]*4+a[i][2];
return a[i][2]*16+a[i][1]*4+a[i][0];
}
ll f()
{
ll ans=0;for(int i=1;i<=n;i++){if(had(i)||i==n)v[i]=g(i);else v[i]=0;}
sort(v+1,v+n);for(int i=1;i<=n;i++)ans=ans*S+v[i];return ans;
}
};
using namespace wcy;
double dfs(int dep)
{
ll now=f();if(vst[now])return dp[now];
double tr=0,ans=0;
for(int col=1;col<=3;col++)
{
double res=1e9;
for(int i=1;i<n;i++)
{
for(int j=0;j<=2;j++)
{
if(!del(i,j)||a[i][j]!=col)continue;
a[i][j]=0;if(a[n][0]>0&&a[n][1]>0&&a[n][2]>0)n++;
for(int k=0;k<=2;k++)
{
if(a[n][k]>0)continue;
a[n][k]=col,res=min(res,dfs(dep+1)),a[n][k]=0;
}
a[i][j]=col;if(!a[n][0]&&!a[n][1]&&!a[n][2])n--;
}
}
if(res!=1e9)tr+=p[col],ans+=p[col]*res;
}
if(tr>=eps)ans=(ans+1.0)/tr;vst[now]=1;return dp[now]=ans;
}
signed main()
{
scanf("%d",&n),p[1]=1.0/6,p[2]=p[3]=1.0/3;
for(int i=1;i<=n;i++)
{
char s[5];scanf("%s",s);
for(int j=0;j<=2;j++)a[i][j]=To(s[j]);
}
printf("%.8lf",dfs(1));
return 0;
}