#include<iostream>
#include<vector>
#include<iomanip>
#include<algorithm>
#include<cmath>
using namespace std; 

//関数テンプレート class Tで各型に対応する　inlineで埋め込まれる
//コンパイル時に各型に合わせた関数が自動的に生成される
template <class T> inline bool chmax(T& a, T b) {if (a < b) { a = b; return 1;} return 0;}
template <class T> inline bool chmin(T& a, T b) {if (a > b) { a = b; return 1;} return 0;}

const long long INF = 1LL << 60;
int N;
vector<double> x, y;
vector<char> d;

//指定した時間での面積を計算する
//一つ一つのレコードについて座標をとって最大、最小を算出するだけ
double area(double t) {
    double xmi = INF, xma = -INF, ymi = INF, yma = -INF;
    for (int i = 0; i < N; i++) {
        double cx, cy;
        if (d[i] == 'L') cx = x[i]-t, cy = y[i];
        else if (d[i] == 'R') cx = x[i]+t, cy = y[i];
        else if (d[i] == 'U') cx = x[i], cy = y[i]+t;
        else cx = x[i], cy = y[i]-t;
        chmin(xmi, cx);
        chmax(xma, cx);
        chmin(ymi, cy);
        chmax(yma, cy);
    }
    //無限になってしまう場合も勝手に配慮されるので気にしなくてもよい
    return (xma - xmi) * (yma - ymi);
}

double solve() {
    //alt...面積の増減が切り替わる時刻のリスト
    vector<double> alt;
    alt.push_back(0);
    
    //核となる処理　
    //一般性を担保できる魔法があるわけではなく、4方向の処理を丁寧に書くのが最短らしい
    // 左
    {
        double mi1 = INF;  //L
        double mi2 = INF;  //R
        double mi3 = INF;  //UD
        for (int i = 0; i < N; i++) {
            if (d[i] == 'L') chmin(mi1, x[i]);
            else if (d[i] == 'R') chmin(mi2, x[i]);
            else chmin(mi3, x[i]);
        }
        //やっぱり条件分岐は丁寧に書くのね
        //LとR向きの左限がどちらも存在するなら、その交差タイミングをとる
        if (mi1 < INF && mi2 < INF) alt.push_back(abs(mi1-mi2)/2);
        //LとUDの左限がどちらも存在するなら、その交差タイミングをとる
        //※交差するとは限らない　LがもともとUDの左にあった場合は交差しない
        //しかし、今回の目的は可能性を有限に絞ること
        //交差しない場合を数えてしまったとしても、最終的な面積の最大値には影響しないし
        //計算量もほとんど変わらない
        //そこで、その条件分岐を丁寧に書くよりは
        //放り投げる鈍感さが必要
        if (mi1 < INF && mi3 < INF) alt.push_back( abs(mi1-mi3));
        //RとUDの左限がどちらも存在するなら、その交差タイミングをとる
        if (mi2 < INF && mi3 < INF) alt.push_back( abs(mi2 - mi3));
    }
    //右
    {
        double ma1 = -INF, ma2 = -INF, ma3 = -INF;
        for (int i = 0; i < N; i++) {
            if (d[i] == 'L') chmax(ma1, x[i]);
            else if (d[i] == 'R') chmax(ma2, x[i]);
            else chmax(ma3, x[i]);
        }
        if (ma1 > -INF && ma2 > -INF) alt.push_back( abs(ma1 - ma2) / 2);
        if (ma1 > -INF && ma3 > -INF) alt.push_back( abs(ma1 - ma3));
        if (ma2 > -INF && ma3 > -INF) alt.push_back( abs(ma2 - ma3)); 
    }

    // 下
    {
        double mi1 = INF; // D
        double mi2 = INF; // U
        double mi3 = INF; // 
        for (int i = 0; i < N; ++i) {
            if (d[i] == 'D') chmin(mi1, y[i]);
            else if (d[i] == 'U') chmin(mi2, y[i]);
            else chmin(mi3, y[i]);
        }
        if (mi1 < INF && mi2 < INF) alt.push_back( abs(mi1 - mi2) / 2 );
        if (mi1 < INF && mi3 < INF) alt.push_back( abs(mi1 - mi3) );
        if (mi2 < INF && mi3 < INF) alt.push_back( abs(mi2 - mi3) );
    }
    // 上
    {
        double ma1 = -INF; // U
        double ma2 = -INF; // D
        double ma3 = -INF; // 
        for (int i = 0; i < N; ++i) {
            if (d[i] == 'D') chmax(ma1, y[i]);
            else if (d[i] == 'U') chmax(ma2, y[i]);
            else chmax(ma3, y[i]);
        }
        if (ma1 > -INF && ma2 > -INF) alt.push_back( abs(ma1 - ma2) / 2 );
        if (ma1 > -INF && ma3 > -INF) alt.push_back( abs(ma1 - ma3) );
        if (ma2 > -INF && ma3 > -INF) alt.push_back( abs(ma2 - ma3) );
    }

    sort(alt.begin(),alt.end());
    alt.erase(unique(alt.begin(),alt.end()), alt.end());
    double res = INF;
    for (int i = 0; i < alt.size(); i++) {
        double tmp = area(alt[i]);
        chmin(res, tmp);
    }

    return res;
}

int main() {
    cin >> N;
    x.resize(N);
    y.resize(N);
    d.resize(N);
    for (int i = 0; i < N; i++) {
        cin >> x[i] >> y[i] >> d[i];
    }
    double res = solve();
    //iomanipをインクルードすると
    //coutで様々な指定が可能
    //fixedで小数点表記を固定　setprecisionで桁数を固定
    cout << fixed << setprecision(10) << res << endl;
}

Measured memory_bytes: 1920