output_description: Print the probability of having more heads than tails. The output is
  considered correct when the absolute error is not greater than 10^{-9}.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N
      p_1 p_2 \ldots p_N
attempt: def wolne_mnozenie_wielomianu(wielomian1, wielomian2):
      odp = [0.0] * (len(wielomian1) + len(wielomian2) - 1)
      for i in range(len(wielomian1)):
          for j in range(len(wielomian2)):
              odp[i + j] += wielomian1[i] * wielomian2[j]
      while len(odp) > 1 and odp[-1] == 0.0:
          odp.pop()
      return odp
  
  
  def wyrownaj(wielomian1, wielomian2):
      if len(wielomian1) > len(wielomian2):
          wielomian2 = wielomian2 + [0.0] * (len(wielomian1) - len(wielomian2))
      if len(wielomian2) > len(wielomian1):
          wielomian1 = wielomian1 + [0.0] * (len(wielomian2) - len(wielomian1))
      return wielomian1, wielomian2
  
  
  def dodawanie_wielomianu(wielomian1, wielomian2):
      wielomian1, wielomian2 = wyrownaj(wielomian1, wielomian2)
  
      odp = [0.0] * len(wielomian2)
      for i in range(len(wielomian1)):
          odp[i] = wielomian1[i] + wielomian2[i]
      while len(odp) > 1 and odp[-1] == 0.0:
          odp.pop()
      return odp
  
  
  def odejmowanie_wielomianu(wielomian1, wielomian2):
      wielomian1, wielomian2 = wyrownaj(wielomian1, wielomian2)
  
      odp = [0.0] * len(wielomian2)
      for i in range(len(wielomian1)):
          odp[i] = wielomian1[i] - wielomian2[i]
      while len(odp) > 1 and odp[-1] == 0.0:
          odp.pop()
      return odp
  
  
  def szybkie_mnozenie_wielomianu(wielomian1, wielomian2):
      wielomian1, wielomian2 = wyrownaj(wielomian1, wielomian2)
      if len(wielomian1) < 3:
          return wolne_mnozenie_wielomianu(wielomian1, wielomian2)
      k = len(wielomian1) // 2
  
      a = wielomian1[k:]
      b = wielomian1[:k]
      c = wielomian2[k:]
      d = wielomian2[:k]
  
      ac = szybkie_mnozenie_wielomianu(a, c)
      bd = szybkie_mnozenie_wielomianu(b, d)
      w = szybkie_mnozenie_wielomianu(
          dodawanie_wielomianu(a, b), dodawanie_wielomianu(c, d)
      )
      w_ac_bd = odejmowanie_wielomianu(w, dodawanie_wielomianu(ac, bd))
  
      ac = [0.0] * 2 * k + ac
      w_ac_bd = [0.0] * k + w_ac_bd
  
      odp = dodawanie_wielomianu(ac, dodawanie_wielomianu(bd, w_ac_bd))
      while len(odp) > 1 and odp[-1] == 0.0:
          odp.pop()
      return odp
  
  
  def wczytaj_liste():
      wczytana_lista = input()
      lista_znakow = wczytana_lista.split()
      ostateczna_lista = []
      for element in lista_znakow:
          ostateczna_lista.append(int(element))
      return ostateczna_lista
  
  
  def wczytaj_rzeczywiste():
      wczytana_lista = input()
      lista_znakow = wczytana_lista.split()
      ostateczna_lista = []
      for element in lista_znakow:
          ostateczna_lista.append(float(element))
      return ostateczna_lista
  
  
  def wymnoz_duzo_wielomianow(wielomiany):
      if len(wielomiany) == 1:
          return wielomiany[0]
  
      k = (len(wielomiany) + 1) // 2
      lewo = wymnoz_duzo_wielomianow(wielomiany[:k])
      prawo = wymnoz_duzo_wielomianow(wielomiany[k:])
  
      return szybkie_mnozenie_wielomianu(lewo, prawo)
  
  
  def rzuc_grosza_wiedzminowi_natychmiast():
      N = wczytaj_liste()[0]
      prawdopodopienstwa = wczytaj_rzeczywiste()
      rzuty = []
      for moneta in prawdopodopienstwa:
          rzut = [1 - moneta, moneta]
          rzuty.append(rzut)
  
      po_rzutach = wymnoz_duzo_wielomianow(rzuty)
  
      odp = sum(po_rzutach[N // 2 + 1 :])
      print(odp)
  
  
  rzuc_grosza_wiedzminowi_natychmiast()
  
problem_description: Statement
  
  Let N be a positive odd number.
  
  There are N coins, numbered 1, 2, \ldots, N. For each i (1 \leq i \leq N),
  when Coin i is tossed, it comes up heads with probability p_i and tails with
  probability 1 - p_i.
  
  Taro has tossed all the N coins. Find the probability of having more heads
  than tails.
samples: [{"input": "3\n    0.30 0.60 0.80", "output": "0.612\n    \n\nThe probability of each case where we have more heads than tails is as\nfollows:\n\n  * The probability of having (Coin 1, Coin 2, Coin 3) = (Head, Head, Head) is 0.3 \u00d7 0.6 \u00d7 0.8 = 0.144;\n  * The probability of having (Coin 1, Coin 2, Coin 3) = (Tail, Head, Head) is 0.7 \u00d7 0.6 \u00d7 0.8 = 0.336;\n  * The probability of having (Coin 1, Coin 2, Coin 3) = (Head, Tail, Head) is 0.3 \u00d7 0.4 \u00d7 0.8 = 0.096;\n  * The probability of having (Coin 1, Coin 2, Coin 3) = (Head, Head, Tail) is 0.3 \u00d7 0.6 \u00d7 0.2 = 0.036.\n\nThus, the probability of having more heads than tails is 0.144 + 0.336 + 0.096\n+ 0.036 = 0.612.\n\n* * *"}, {"input": "1\n    0.50", "output": "0.5\n    \n\nOutputs such as `0.500`, `0.500000001` and `0.499999999` are also considered\ncorrect.\n\n* * *"}, {"input": "5\n    0.42 0.01 0.42 0.99 0.42", "output": "0.3821815872"}]