#include #include #include using ldouble = long double; void solve() { int m; std::cin >> m; int n = 1 << m; std::vector ps(1 << m); for (auto& p : ps) { std::cin >> p; p *= p; } std::vector dp(1 << m, 1); for (int i = 1; i <= m; ++i) { std::vector ndp(1 << m, 0); for (int x = 0; x < n; ++x) { for (int y = 0; y < n; ++y) { if ((x >> i) != (y >> i) || ((x >> (i - 1)) & 1) == ((y >> (i - 1)) & 1)) continue; ndp[x] += dp[x] * dp[y] * ps[x] / (ps[x] + ps[y]); } } std::swap(dp, ndp); } std::cout << dp[0] << "\n"; } int main() { std::cin.tie(nullptr); std::ios::sync_with_stdio(false); std::cout << std::fixed << std::setprecision(10); solve(); return 0; }