func_code_string: #include <bits/stdc++.h>   using namespace std;   struct hash {     int head[8592637], next[8592637], t;     unsigned long long lk[8592637];     double x[8592637];     double find(unsigned long long s) {       for (int i = head[s % 8592637]; i; i = next[i])         if (lk[i] == s) return x[i];       return -1;     }     void ins(unsigned long long s, double f) {       if (find(s) > -1) return;       lk[++t] = s, x[t] = f, next[t] = head[s % 8592637], head[s % 8592637] = t;     }   } H;   int N, a[105], F[256], b[105];   inline int G(int x) { return !!x; }   inline void get(int x, int* a) {     a[0] = (x >> 4) & 3, a[1] = (x >> 2) & 3, a[2] = x & 3;   }   inline int BG(int a, int b, int c) {     if (a > c) swap(a, c);     return (((a << 2) + b) << 2) + c;   }   void init() {     scanf( %d , &N), 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 *= 31415927) += 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; 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 < 3; j++)         if (x[j]) {           int t = x[j];           if (G(x[0]) + G(x[1]) + G(x[2]) == 2 && j == 1) continue;           if (G(x[0]) + G(x[1]) + G(x[2]) == 2 && !x[1]) break;           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 < 3; 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));     return 0;   }   