#include <bits/stdc++.h>
using namespace std;
const int INF = 1 << 29, N = 5e5 + 50, M = 1e6 + 5, Q = 8592637, P = 31415927;
inline int read() {
  int f = 1, x = 0;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
void judge() {
  freopen("data.in", "r", stdin);
  freopen("data.out", "w", stdout);
}
int n, a[105], F[256], b[105];
struct hash {
  int head[Q], nxt[Q], ct;
  unsigned long long toit[Q];
  double x[Q];
  double find(unsigned long long s) {
    for (int k = head[s % Q]; k; k = nxt[k])
      if (toit[k] == s) return x[k];
    return -1;
  }
  void ins(unsigned long long s, double f) {
    if (find(s) > -1) return;
    toit[++ct] = s, x[ct] = f, nxt[ct] = head[s % Q], head[s % Q] = ct;
  }
} H;
inline int g(int x) { return !!x; }
inline int bg(int a, int b, int c) {
  if (a > c) swap(a, c);
  return (((a << 2) + b) << 2) + c;
}
inline void get(int x, int *a) {
  a[0] = (x >> 4) & 3, a[1] = (x >> 2) & 3, a[2] = x & 3;
}
void init() {
  n = read();
  F['G'] = 1, F['B'] = 2, F['R'] = 3;
  char s[4];
  for (int(i) = (1); (i) <= (n); (i)++)
    scanf("%s", s), a[i] = bg(F[s[0]], F[s[1]], F[s[2]]);
}
unsigned long long Hash(int n) {
  unsigned long long s = 0;
  for (int(i) = (1); (i) <= (n); (i)++) b[i] = a[i];
  sort(b + 1, b + n);
  for (int(i) = (1); (i) <= (n); (i)++) (s *= P) += b[i];
  return s;
}
double dfs(int n) {
  unsigned long long s = Hash(n);
  double f = H.find(s), c[4] = {0, 1e9, 1e9, 1e9};
  if (f > -1) return f;
  for (int(i) = (1); (i) <= (n - 1); (i)++) {
    int x[3], y[3], nn = n, ai = a[i], an = a[n];
    get(ai, x);
    get(an, y);
    if (g(x[0]) + g(x[1]) + g(x[2]) == 1) continue;
    if (y[0] && y[1] && y[2]) nn++, y[0] = y[1] = y[2] = 0;
    for (int(j) = (0); (j) <= (2); (j)++)
      if (x[j]) {
        int t = x[j];
        if (g(x[0]) + g(x[1]) + g(x[2]) == 2 && (j == 1 || !x[1])) continue;
        x[j] = 0, a[i] = bg(x[0], x[1], x[2]);
        if (g(x[0]) + g(x[1]) + g(x[2]) == 1 || !x[1]) a[i] = 0;
        x[j] = t;
        for (int(k) = (0); (k) <= (2); (k)++)
          if (!y[k]) {
            y[k] = t, a[nn] = bg(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) return H.ins(s, 0), 0;
  double t = 1.0 / 6;
  if (c[1] == 1e9) t += 1.0 / 3, c[1] = 0;
  if (c[2] == 1e9) t += 1.0 / 3, c[2] = 0;
  if (c[3] == 1e9) t += 1.0 / 6, c[3] = 0;
  f = (c[1] / 3 + c[2] / 3 + c[3] / 6 + 1) / (1 - t), H.ins(s, f);
  return f;
}
int main() {
  init();
  printf("%.6lf\n", dfs(n));
}
