// Skyqwq #include #define pb push_back #define fi first #define se second #define mp make_pair using namespace std; typedef long long LL; template void chkMax(T &x, T y) { if (y > x) x = y; } template void chkMin(T &x, T y) { if (y < x) x = y; } template void inline read(T &x) { int f = 1; x = 0; char s = getchar(); while (s < '0' || s > '9') { if (s == '-') f = -1; s = getchar(); } while (s <= '9' && s >= '0') x = x * 10 + (s ^ 48), s = getchar(); x *= f; } const int N = (1 << 8) + 5; int a[8], b[8], c, len; bool inline clear() { int ans = 0; for (int i = 0; i < len; i++) { int j = i; while (j + 1 < len && a[j + 1] == a[i]) ++j; int l = j - i + 1; if (l >= 3) { c += l * l; memcpy(b, a, sizeof b); for (int k = j + 1; k < len; k++) a[k - l] = b[k]; len -= l; for (int k = len; k < len + l; k++) a[k] = 0; return 1; } i = j; } return 0; } void inline out(int x) { for (int i = 0; i < 8; i++) printf("%d", x >> i & 1); } double w[N][N]; int n = (1 << 8); void gauss() { for (int i = 0; i < n; i++) { if (!w[i][i]) { for (int j = i + 1; j < n; j++) { if (w[j][i]) { swap(w[i], w[j]); break; } } } double o = w[i][i]; for (int j = 0; j <= n; j++) w[i][j] /= o; for (int j = 0; j < n; j++) { if (i != j && w[j][i]) { double t = w[j][i]; for (int k = 0; k <= n; k++) w[j][k] -= w[i][k] * t; } } } } void inline prework() { for (int i = 0; i < (1 << 8); i++) { for (int j = 0; j < 8; j++) a[j] = i >> j & 1; c = 0; len = 8; while (clear()); int r = 8 - len; int v = 0; for (int j = 7; ~j; j--) v = v * 2 + a[j]; double p = 1.0 / (1 << r); w[i][i] = 1, w[i][n] = c; if (r) for (int j = 0; j < (1 << r); j++) { int t = v + (j << len); w[i][t] += -p; } } } char s[10]; int main() { prework(); gauss(); int T; read(T); while (T--) { scanf("%s", s); int v = 0; for (int i = 7; ~i; i--) v = v * 2 + s[i] - '0'; printf("%.14lf\n", w[v][n]); } return 0; }