#include<bits/stdc++.h>
using namespace std;
double cxu,cxl,cyu,cyl;
bool bx,by;
double uR,lR,uL,lL,uU,lU,uD,lD;
bool bR,bL,bU,bD;
typedef struct{
  double x,y; char d;
}dat;
auto u = [](double& a,double b){a=max(a,b);};
auto l = [](double& a,double b){a=min(a,b);};
const double inf = 1e100;
int main(){
  dat D;
  int n;
  cin>>n;
  for(int i=0;i<n;++i){
    cin>>D.x>>D.y>>D.d;
    switch(D.d){
      case 'U':
      case 'D':
        if(bx)u(cxu,D.x),l(cxl,D.x);
        else cxu=cxl=D.x,bx=1;
        break;
      case 'L':
      case 'R':
        if(by)u(cyu,D.y),l(cyl,D.y);
        else cyu=cyl=D.y,by=1;
    }
    switch(D.d){
      case 'U':
        if(bU)u(uU,D.y),l(lU,D.y);
        else uU=lU=D.y,bU=1;
        break;
      case 'D':
        if(bD)u(uD,D.y),l(lD,D.y);
        else uD=lD=D.y,bD=1;
        break;
      case 'L':
        if(bL)u(uL,D.x),l(lL,D.x);
        else uL=lL=D.x,bL=1;
        break;
      case 'R':
        if(bR)u(uR,D.x),l(lR,D.x);
        else uR=lR=D.x,bR=1;
        break;
    }
  }
  auto xmax = [&](double t){return max({bL?uL-t:-inf,bR?uR+t:-inf,bx?cxu:-inf});};
  auto xmin = [&](double t){return min({bL?lL-t:inf,bR?lR+t:inf,bx?cxl:inf});};
  auto ymax = [&](double t){return max({bD?uD-t:-inf,bU?uU+t:-inf,by?cyu:-inf});};
  auto ymin = [&](double t){return min({bD?lD-t:inf,bU?lU+t:inf,by?cyl:inf});};
  auto dx = [&](double t){return xmax(t)-xmin(t);};
  auto dy = [&](double t){return ymax(t)-ymin(t);};
  auto f = [&](double t){u(t,-t);return fabs(dx(t)*dy(t));};
  cout<<fixed<<setprecision(12)<<min({f(lL-cxl),f((lL-lR)/2.0),f(cxl-lR),f(uL-cxu),f((uL-uR)/2.0),f(cxu-uR),f(lD-cyl),f((lD-lU)/2.0),f(cyl-lU),f(uD-cyu),f((uD-uU)/2.0),f(cyu-uU),f(0.0)})<<endl;
}