#include <bits/stdc++.h>
using namespace std;
const int oo = 0x3f3f3f3f;
const int SIZE = 4000050;
const int P = 67;
const int maxn = 20;
int a[maxn], b[maxn];
int F[260];
char str[10];
struct HASH {
  int head[SIZE], next[SIZE];
  unsigned long long state[SIZE];
  double dp[SIZE];
  int tol;
  void init() {
    memset(head, -1, sizeof head);
    tol = 0;
  }
  double find(unsigned long long s) {
    for (int i = head[s % SIZE]; i != -1; i = next[i]) {
      if (state[i] == s) return dp[i];
    }
    return -1;
  }
  bool ins(unsigned long long s, double f) {
    if (find(s) > -1) return false;
    dp[++tol] = f;
    state[tol] = s;
    next[tol] = head[s % SIZE];
    head[s % SIZE] = tol;
    return true;
  }
} mat;
unsigned long long Hash(int n) {
  for (int i = 1; i <= n; i++) b[i] = a[i];
  sort(b + 1, b + n);
  unsigned long long s = 0;
  for (int i = 1; i <= n; i++) {
    s *= P;
    s += b[i];
  }
  return s;
}
inline void set_ST(int st[], int x) {
  st[0] = (x >> 4) & 3;
  st[1] = (x >> 2) & 3;
  st[2] = x & 3;
}
inline int get_ST(int a, int b, int c) {
  if (a > c) swap(a, c);
  return (((a << 2) + b) << 2) + c;
}
double dfs(int n) {
  unsigned long long s = Hash(n);
  double f = mat.find(s), c[4] = {0, 1e9, 1e9, 1e9};
  if (f > -1) return f;
  for (int i = 1; i < n; i++) {
    int x[3], y[3], nn = n;
    int ai = a[i], an = a[n];
    set_ST(x, ai);
    set_ST(y, an);
    if ((!!x[0]) + (!!x[1]) + (!!x[2]) == 1) continue;
    if (y[0] && y[1] && y[2]) {
      nn++;
      y[0] = y[1] = y[2] = 0;
    }
    for (int j = 0; j < 3; j++)
      if (x[j]) {
        if ((!!x[0]) + (!!x[1]) + (!!x[2]) == 2 && (j == 1 || !x[1])) continue;
        int t = x[j];
        x[j] = 0;
        a[i] = get_ST(x[0], x[1], x[2]);
        if ((!!x[0]) + (!!x[1]) + (!!x[2]) == 1 || !x[1]) a[i] = 0;
        x[j] = t;
        for (int k = 0; k < 3; k++)
          if (!y[k]) {
            y[k] = t;
            a[nn] = get_ST(y[0], y[1], y[2]);
            y[k] = 0;
            c[t] = min(c[t], dfs(nn));
          }
      }
    a[i] = ai;
    a[n] = an;
  }
  if (c[1] == 1e9 && c[2] == 1e9 && c[3] == 1e9) {
    mat.ins(s, 0);
    return 0.0;
  }
  double p = 1.0 / 6.0;
  if (c[1] == 1e9) p += 1.0 / 3.0, c[1] = 0;
  if (c[2] == 1e9) p += 1.0 / 3.0, c[2] = 0;
  if (c[3] == 1e9) p += 1.0 / 6.0, c[3] = 0;
  f = (c[1] / 3.0 + c[2] / 3.0 + c[3] / 6.0 + 1.0) / (1.0 - p);
  mat.ins(s, f);
  return f;
}
int main() {
  int n;
  F['G'] = 1;
  F['B'] = 2;
  F['R'] = 3;
  mat.init();
  while (scanf("%d", &n) != EOF) {
    for (int i = 1; i <= n; i++) {
      scanf("%s", str);
      a[i] = get_ST(F[str[0]], F[str[1]], F[str[2]]);
    }
    printf("%.15lf\n", dfs(n));
  }
}
