import qualified Data.ByteString.Char8 as BS
import qualified Data.Vector.Unboxed as VU
import Control.Monad
import Data.Array.Unboxed
import Data.Array.ST

solve :: Int -> VU.Vector Double -> UArray (Int,Int) Double
solve n ps =
  runSTUArray $ do
    dp <- newArray ((0,0),(n,n)) (0.0 :: Double)
    writeArray dp (0,0) 1.0
    forM_ [0..n-1] $ \i -> 
      forM_ [i..n-1] $ \j -> do
        rd1 <- readArray dp (i,j)
        rd2 <- readArray dp (i+1,j+1)
        rd3 <- readArray dp (i,j+1)
        
        writeArray dp (i+1,j+1) $ rd2 + rd1 * (ps VU.! j)
        writeArray dp (i,j+1) $ rd3 + rd1 * (1.0 - (ps VU.! j))
    return dp

main = do
  n <- readLn :: IO Int
  ps <- VU.fromList . map (read . BS.unpack) . BS.words <$> BS.getLine :: IO (VU.Vector Double)
  let dp = solve n ps
  print $ sum [e | ((iy,ix),e) <- assocs dp, iy >= (n `quot` 2)+1, ix == n]