#include <bits/stdc++.h>
using namespace std;
const long double INF = 1e9;
vector<tuple<int, int, int> > v;
map<pair<long long, tuple<int, int, int> >, long double> mp;
vector<int> e[31][4];
long double pb[] = {1.0 / 6, 1.0 / 6, 1.0 / 3, 1.0 / 3};
int get_pos(vector<tuple<int, int, int> > v, tuple<int, int, int> p) {
  return int(lower_bound(v.begin(), v.end(), p) - v.begin());
}
tuple<int, int, int> good_tp(int a, int b, int c) {
  if (a > c) swap(a, c);
  return tuple<int, int, int>(a, b, c);
}
long long to_num(int a[]) {
  int b[8];
  for (int i = 0; i < 8; i++) b[i] = a[i];
  sort(b, b + 8);
  long long r = 0;
  for (int i = 0; i < 8; i++) {
    r *= 22;
    r += b[i];
  }
  return r;
}
long double ask(pair<long long, tuple<int, int, int> > x) {
  if (mp.find(x) != mp.end())
    return mp[x];
  else {
    long long p = x.first;
    int a = get<0>(x.second);
    int b = get<1>(x.second);
    int c = get<2>(x.second);
    int id = get_pos(v, x.second);
    int A = a, B = b, C = c;
    if (A && B && C) A = B = C = 0;
    int num[8];
    for (int i = 7; i >= 0; i--) num[i] = p % 22, p /= 22;
    long double unchanged = pb[0];
    bool OK = false;
    long double sum = 1;
    for (int i = 1; i <= 3; i++) {
      bool flag = false;
      long double mn = INF;
      for (int j = 0; j < 8; j++) {
        int t = num[j];
        for (int x : e[t][i]) {
          flag = true;
          OK = true;
          num[j] = x;
          if (A != a) num[0] = id;
          long long next_num = to_num(num);
          if (A != a) num[0] = 0;
          tuple<int, int, int> next_tp;
          if (!A) {
            next_tp = good_tp(i, B, C);
            mn = min(mn, ask(pair<long long, tuple<int, int, int> >(next_num,
                                                                    next_tp)));
          }
          if (!B) {
            next_tp = good_tp(A, i, C);
            mn = min(mn, ask(pair<long long, tuple<int, int, int> >(next_num,
                                                                    next_tp)));
          }
          if (!C) {
            next_tp = good_tp(A, B, i);
            mn = min(mn, ask(pair<long long, tuple<int, int, int> >(next_num,
                                                                    next_tp)));
          }
          num[j] = t;
        }
      }
      if (!flag)
        unchanged += pb[i];
      else {
        sum += pb[i] * mn;
      }
    }
    if (!OK)
      return mp[x] = 0;
    else {
      return mp[x] = sum / (1 - unchanged);
      puts("oao");
    }
  }
}
int char_to_int(char c) {
  if (c == 'R')
    return 1;
  else if (c == 'G')
    return 2;
  else
    return 3;
}
int main() {
  for (int i = 0; i <= 3; i++) {
    v.emplace_back(0, 0, i);
    if (i) e[i][i].push_back(0);
  }
  int m = 4;
  for (int i = 1; i <= 3; i++)
    for (int j = 1; j <= 3; j++)
      for (int k = i; k <= 3; k++) {
        v.emplace_back(i, j, k);
        e[m][j].push_back(0);
        e[m][i].push_back(k);
        if (i != k) e[m][k].push_back(i);
        m++;
      }
  int n;
  scanf("%d", &n);
  string second;
  int num[8] = {};
  for (int ni = 0; ni < n - 1; ni++) {
    cin >> second;
    int a = char_to_int(second[0]);
    int b = char_to_int(second[1]);
    int c = char_to_int(second[2]);
    tuple<int, int, int> t = good_tp(a, b, c);
    num[ni] = get_pos(v, t);
  }
  cin >> second;
  int a = char_to_int(second[0]);
  int b = char_to_int(second[1]);
  int c = char_to_int(second[2]);
  tuple<int, int, int> next_tp = good_tp(a, b, c);
  printf("%.9f\n", (double)ask(pair<long long, tuple<int, int, int> >(
                       to_num(num), next_tp)));
}
