import qualified Data.Vector.Unboxed as VU
import qualified Data.Vector.Unboxed.Mutable as VUM
import Data.List
import Control.Monad

main = do
    n <- readLn :: IO Int
    ps <- map read . words <$> getLine :: IO [Double]
    print . VU.sum . VU.drop (n `div` 2 + 1) $ toss n ps

toss n ps = VU.create $ do
    vec <- VUM.replicate (n + 1) 0
    VUM.write vec 0 1
    forM_ ps $ \p -> do
        forM_ [n,n-1..1] $ \i -> do
            p1 <- VUM.read vec i
            p2 <- VUM.read vec (i-1)
            VUM.write vec i (p1 * (1-p) + p2 * p)
        p0 <- VUM.read vec 0
        VUM.write vec 0 (p0*(1-p))
    return vec