module Array = ArrayLabels
module List = ListLabels

let inf = 10000000000
let (>>=) x f = List.map f x |> List.concat

let () =
  Scanf.scanf "%d" @@ fun n ->
  let xyds = Array.init n (fun _ -> Scanf.scanf " %d %d %s" (fun x y d -> 2*x, 2*y, d)) in

  let find_edges axis dir =
    Array.fold_left xyds ~init:(inf, -inf) ~f:(fun (minv, maxv) (x, y, d) ->
      let v = match axis with `X -> x | `Y -> y in
      if d = dir then (min minv v, max maxv v) else (minv, maxv))
  in 
  let exs =
    [("R", 1); ("L", -1); ("U", 0); ("D", 0)]
    |> List.map ~f:(fun (d, m) -> let x1, x2 = find_edges `X d in (x1, x2, m)) in
  let eys =
    [("R", 0); ("L", 0); ("U", 1); ("D", -1)]
    |> List.map ~f:(fun (d, m) -> let y1, y2 = find_edges `Y d in (y1, y2, m)) in

  let area_of_time (t : int) =
    let xm, xM = List.fold_left exs ~init:(inf, -inf) ~f:(fun (xm, xM) (x1, x2, mul) ->
      (min xm (x1 + mul * t), max xM (x2 + mul * t))) in
    let ym, yM = List.fold_left eys ~init:(inf, -inf) ~f:(fun (ym, yM) (y1, y2, mul) ->
      (min ym (y1 + mul * t), max yM (y2 + mul * t))) in
    (xM - xm) * (yM - ym)
  in

  let txs =
    exs >>= fun (xa1, xa2, da) ->
    exs >>= fun (xb1, xb2, db) ->
      if da = db then []
      else
        [xa1; xa2] >>= fun xa ->
        [xb1; xb2] >>= fun xb ->
          if abs xa + abs xb >= inf then []
          else [abs @@ (xa - xb) / (da - db)] in
  let tys =
    eys >>= fun (ya1, ya2, da) ->
    eys >>= fun (yb1, yb2, db) ->
      if da = db then []
      else
        [ya1; ya2] >>= fun ya ->
        [yb1; yb2] >>= fun yb ->
          if abs ya + abs yb >= inf then []
          else [abs @@ (ya - yb) / (da - db)] in

  let ans =
    List.map area_of_time ([0] @ txs @ tys)
    |> List.fold_left ~f:min ~init:(area_of_time 0) in
  Printf.printf "%.11f\n" (float_of_int ans /. 4.)
