#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <utility>

using namespace std;
typedef long long ll;
const ll infll = 0x3f3f3f3f3f3f3f3fll;
inline int getint(){
  char c; int res = 0, sig = 1;
  for(c = getchar();c < '0' || c > '9';c = getchar()) if(c == '-') sig = -1;
  for(;c >= '0' && c <= '9';c = getchar()) res = res * 10 + (c - '0');
  return res * sig;
}
int d_id[35];
const int dx[] = {-1,0,1,0};
const int dy[] = {0,1,0,-1};
int n,x,y;
char d[5];
int xmin[3],xmax[3],ymin[3],ymax[3];
double calc(double t){
  double minx = min(min(xmin[0] - t,xmin[1] + t),1.0 * xmin[2]),
         maxx = max(max(xmax[0] - t,xmax[1] + t),1.0 * xmax[2]),
         miny = min(min(ymin[0] + t,ymin[1] - t),1.0 * ymin[2]),
         maxy = max(max(ymax[0] + t,ymax[1] - t),1.0 * ymax[2]);
  return (maxy - miny) * (maxx - minx);
}
int main(){
  d_id['L' - 'A'] = 0, d_id['U' - 'A'] = 1,
  d_id['R' - 'A'] = 2, d_id['D' - 'A'] = 3;
  n = getint();
  memset(xmin,0x3f,sizeof(xmin));
  memset(xmax,0xc0,sizeof(xmax));
  memset(ymin,0x3f,sizeof(ymin));
  memset(ymax,0xc0,sizeof(ymax));
  for(int i = 1;i <= n;i++){
    x = getint(), y = getint();
    scanf("%s",d);
    if(d[0] == 'L'){
      xmin[0] = min(xmin[0],x);
      xmax[0] = max(xmax[0],x);
      ymin[2] = min(ymin[2],y);
      ymax[2] = max(ymax[2],y);
    }else if(d[0] == 'R'){
      xmin[1] = min(xmin[1],x);
      xmax[1] = max(xmax[1],x);
      ymin[2] = min(ymin[2],y);
      ymax[2] = max(ymax[2],y);
    }else if(d[0] == 'U'){
      ymin[0] = min(ymin[0],y);
      ymax[0] = max(ymax[0],y);
      xmin[2] = min(xmin[2],x);
      xmax[2] = max(xmax[2],x);
    }else{
      ymin[1] = min(ymin[1],y);
      ymax[1] = max(ymax[1],y);
      xmin[2] = min(xmin[2],x);
      xmax[2] = max(xmax[2],x);
    }
  }
  double ans = calc(0);
  if(xmin[2] < xmin[0]) ans = min(ans,calc(xmin[0] - xmin[2]));
  if(xmax[2] < xmin[0]) ans = min(ans,calc(xmin[0] - xmax[2]));
  if(xmin[2] < xmax[0]) ans = min(ans,calc(xmax[0] - xmin[2]));
  if(xmax[2] < xmax[0]) ans = min(ans,calc(xmax[0] - xmax[2]));
  if(xmin[2] > xmin[1]) ans = min(ans,calc(xmin[2] - xmin[1]));
  if(xmax[2] > xmin[1]) ans = min(ans,calc(xmax[2] - xmin[1]));
  if(xmin[2] > xmax[1]) ans = min(ans,calc(xmin[2] - xmax[1]));
  if(xmax[2] > xmax[1]) ans = min(ans,calc(xmax[2] - xmax[1]));
  if(xmin[1] < xmin[0]) ans = min(ans,calc((xmin[0] - xmin[1]) * 0.5));
  if(xmin[1] < xmax[0]) ans = min(ans,calc((xmax[0] - xmin[1]) * 0.5));
  if(xmax[1] < xmin[0]) ans = min(ans,calc((xmin[0] - xmax[1]) * 0.5));
  if(xmax[1] < xmax[0]) ans = min(ans,calc((xmax[0] - xmax[1]) * 0.5));
  
  if(ymin[2] > ymin[0]) ans = min(ans,calc(ymin[2] - ymin[0]));
  if(ymax[2] > ymin[0]) ans = min(ans,calc(ymax[2] - ymin[0]));
  if(ymin[2] > ymax[0]) ans = min(ans,calc(ymin[2] - ymax[0]));
  if(ymax[2] > ymax[0]) ans = min(ans,calc(ymax[2] - ymax[0]));
  if(ymin[2] < ymin[1]) ans = min(ans,calc(ymin[1] - ymin[2]));
  if(ymax[2] < ymin[1]) ans = min(ans,calc(ymin[1] - ymax[2]));
  if(ymin[2] < ymax[1]) ans = min(ans,calc(ymax[1] - ymin[2]));
  if(ymax[2] < ymax[1]) ans = min(ans,calc(ymax[1] - ymax[2]));
  if(ymin[1] > ymin[0]) ans = min(ans,calc((ymin[1] - ymin[0]) * 0.5));
  if(ymin[1] > ymax[0]) ans = min(ans,calc((ymin[1] - ymax[0]) * 0.5));
  if(ymax[1] > ymin[0]) ans = min(ans,calc((ymax[1] - ymin[0]) * 0.5));
  if(ymax[1] > ymax[0]) ans = min(ans,calc((ymax[1] - ymax[0]) * 0.5));
  
  printf("%.10f\n",ans);
  return 0;
}


Measured memory_bytes: 256