#include #define rep(i, n) for(int i = 0; i < (int)(n); i ++) #define rep1(i, n) for(int i = 1; i <= (int)(n); i ++) #define MP make_pair using namespace std; typedef long long LL; typedef pair PII; const int MOD = 998244353; double prob[265][265]; int len, val[15], csum; bool elim() { rep(i, len - 2) if(val[i] == val[i + 1] && val[i] == val[i + 2]) { int j = i; while(j < len && val[j] == val[i]) j ++; for(int k = j; k < len; k ++) val[k - j + i] = val[k]; len -= j - i; csum += (j - i) * (j - i); return true; } return false; } double dp[265]; bool vis[265]; vector ord, chv; void dfs0(int v) { vis[v] = true; rep(i, 256) if(!vis[i] && prob[i][v]) dfs0(i); ord.push_back(v); } void dfs1(int v) { vis[v] = true; chv.push_back(v); rep(i, 256) if(!vis[i] && prob[v][i]) dfs1(i); } bool inc[265]; double mat[265][265]; const double EPS = 1e-8; double absv(double x) { return x < 0 ? -x : x; } void calc() { int l = chv.size(); rep(i, 256) inc[i] = false; rep(i, l) inc[chv[i]] = true; rep(i, l) mat[i][l] = dp[chv[i]]; rep(i, l) rep(j, 256) if(prob[chv[i]][j] && !inc[j]) mat[i][l] += dp[j] * prob[chv[i]][j]; rep(i, l) rep(j, l) mat[i][j] = (i == j) - prob[chv[i]][chv[j]]; rep(i, l) { int ci = -1; for(int j = i; j < l; j ++) if(absv(mat[j][i]) > EPS) { ci = j; break; } if(ci == -1) return; if(ci != i) for(int j = i; j <= l; j ++) swap(mat[i][j], mat[ci][j]); double cp = 1.0 / mat[i][i]; for(int j = i + 1; j < l; j ++) { for(int k = i + 1; k <= l; k ++) mat[j][k] -= mat[j][i] * cp * mat[i][k]; mat[j][i] = 0; } } for(int i = l - 1; i >= 0; i --) { dp[chv[i]] = mat[i][l]; for(int j = i + 1; j < l; j ++) dp[chv[i]] -= mat[i][j] * dp[chv[j]]; dp[chv[i]] /= mat[i][i]; } } char buf[15]; int main() { rep(i, 256) { csum = 0; len = 8; rep(j, 8) val[j] = i >> j & 1; while(elim()) ; dp[i] = csum; double cp = 1.0 / (1 << (8 - len)); int cm = 0; rep(j, len) cm |= val[j] << j; rep(j, 1 << (8 - len)) prob[i][cm | j << len] = cp; } rep(i, 256) if(!vis[i]) dfs0(i); rep(i, 256) vis[i] = false; reverse(ord.begin(), ord.end()); rep(i, 256) if(!vis[ord[i]]) { chv.clear(); dfs1(ord[i]); calc(); } int T; scanf("%d", &T); while(T --) { scanf("%s", buf); int x = 0; rep(i, 8) x |= (buf[i] - '0') << i; printf("%.10lf\n", dp[x]); } return 0; }