#include using namespace std; const int N = 260; const double eps = 1e-8; double a[N][N]; double x[N]; int gauss(int equ,int var){ for(int i=0;i<=var;i++)x[i]=0; int col=0; int row; for(row=0;rowabs(a[maxRow][col])) maxRow=i; } if(maxRow!=row){ for(int j=row;j eps){ double temp=a[i][col]/a[row][col]; for(int j=col;jeps) return -1; int temp=var-row; if(row=0;i--){ double temp=a[i][var]; for(int j=i+1;j &b) { for (int i = 0; i + 2 < (int)b.size(); ++i) { if (b[i] != b[i + 1] || b[i] != b[i + 2]) continue; int val = b[i], cnt = 0; vector::iterator it = b.begin() + i; while (it != b.end() && *it == val) { it = b.erase(it); ++cnt; } score += cnt * cnt; return true; } return false; } void init(int n) { vector b; b.reserve(8); for (int i = 0; i < 8; ++i) b.push_back(n >> (7 - i) & 1); score = 0; while (reduce(b)) ; a[n][n] = 1; a[n][256] = score; if (b.size() == 8) return; int num = 0; for (int x : b) num = num << 1 | x; num <<= 8 - (int)b.size(); int end = 1 << (8 - (int)b.size()); double val = 1.0 / end; for (int i = 0; i < end; ++i) a[n][num + i] -= val; } int main() { for (int i = 0; i < 256; ++i) init(i); assert(!gauss(256, 256)); int T; char s[11]; scanf("%d", &T); while (T--) { scanf("%s", s); int n = 0; for (int i = 0; i < 8; ++i) n = n << 1 | (s[i] - '0'); printf("%.11f\n", x[n]); } return 0; }