N = gets.to_i
P = N.times.map {
  x, y, d = gets.chomp.split

  [x.to_i, y.to_i, d]
}

def f(t)
  min_y = Float::INFINITY
  max_y = -Float::INFINITY
  min_x = Float::INFINITY
  max_x = -Float::INFINITY

  P.each do |x, y, d|
    case d
    when 'R'
      x += t
    when 'L'
      x -= t
    when 'U'
      y += t
    when 'D'
      y -= t
    end

    min_y = y if min_y > y
    min_x = x if min_x > x
    max_y = y if max_y < y
    max_x = x if max_x < x
  end

  # p [max_y, min_y, max_x, min_x]
  (max_y - min_y) * (max_x - min_x)
end

def ternary_search_tree(left, right)
  loop_cnt = 100

  loop_cnt.times do
    if yield((left * 2 + right) / 3.0) < yield((left + right * 2) / 3.0)
      right = (left + right * 2) / 3.0
    else
      left = (left * 2 + right) / 3.0
    end
  end

  (left + right) / 2.0
end

left = 0
right = 10 ** 8

time = ternary_search_tree(left, right) { |x| f(x) }

puts "%10.9f" % f(time)
