INF = 1 << 30
def min(a,b); a < b ? a : b; end
def max(a,b); a > b ? a : b; end

N = gets.to_i
P = Hash.new{|h,k| h[k] = {x: {max: -INF, min: INF}, y: {max: -INF, min: INF}}}

N.times do
  x,y,d = gets.split
  x = x.to_i; y = y.to_i; d = d.to_sym
  P[d][:x][:max] = max(P[d][:x][:max], x) 
  P[d][:x][:min] = min(P[d][:x][:min], x) 
  P[d][:y][:max] = max(P[d][:y][:max], y) 
  P[d][:y][:min] = min(P[d][:y][:min], y)
end

def bounding_box(t)
  x_min = min(min(P[:U][:x][:min], P[:D][:x][:min]), min(P[:L][:x][:min] - t, P[:R][:x][:min] + t))
  x_max = max(max(P[:U][:x][:max], P[:D][:x][:max]), max(P[:L][:x][:max] - t, P[:R][:x][:max] + t))
  y_min = min(min(P[:L][:y][:min], P[:R][:y][:min]), min(P[:D][:y][:min] - t, P[:U][:y][:min] + t))
  y_max = max(max(P[:L][:y][:max], P[:R][:y][:max]), max(P[:D][:y][:max] - t, P[:U][:y][:max] + t))
  (x_max - x_min) * (y_max - y_min)
end

T = [ P[:L][:x][:min] - min(P[:U][:x][:min], P[:D][:x][:min]), min(P[:U][:x][:min], P[:D][:x][:min]) - P[:R][:x][:min],  (P[:L][:x][:min] - P[:R][:x][:min]) / 2.0,
      P[:L][:x][:max] - max(P[:U][:x][:max], P[:D][:x][:max]), max(P[:U][:x][:max], P[:D][:x][:max]) - P[:R][:x][:max],  (P[:L][:x][:max] - P[:R][:x][:max]) / 2.0,
      P[:D][:y][:min] - min(P[:L][:y][:min], P[:R][:y][:min]), min(P[:L][:y][:min], P[:R][:y][:min]) - P[:U][:y][:min],  (P[:D][:y][:min] - P[:U][:y][:min]) / 2.0,
      P[:D][:y][:max] - max(P[:L][:y][:max], P[:R][:y][:max]), max(P[:L][:y][:max], P[:R][:y][:max]) - P[:U][:y][:max],  (P[:D][:y][:max] - P[:U][:y][:max]) / 2.0,
      0, INF ].map{|t| max(t,0) }

puts T.map{|t| bounding_box(t) }.min
