#include<iostream>
#include<iomanip>
#include<vector>
#include<string>
#include<cstring>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<climits>
#include<fstream>

#define MOD (1000000007)

using namespace std;

typedef long long int Int;

constexpr Int TEN(int n) { return n == 0 ? 1 : 10 * TEN(n-1); }

Int N;
Int X[100000+10];
Int Y[100000+10];
Int Dx[100000+10];
Int Dy[100000+10];

double calc(double t) {
    double xmin = TEN(18);
    double xmax = -TEN(18);
    double ymin = TEN(18);
    double ymax = -TEN(18);

    for(int i = 1;i <= N;i++) {
        xmin = min(xmin, 1.0*X[i]+Dx[i]*t);
        xmax = max(xmax, 1.0*X[i]+Dx[i]*t);
        ymin = min(ymin, 1.0*Y[i]+Dy[i]*t);
        ymax = max(ymax, 1.0*Y[i]+Dy[i]*t);
    }

    return (xmax - xmin)*(ymax - ymin);
}

double solve(void) {
    double l = 0;
    double r = 1e9;
    double ans = TEN(18);

    int num = 500;
    while(num--) {
        double left = l + (r-l)/3;
        double right = left + (r-l)/3;

        double f1 = calc(left);
        double f2 = calc(right);

        if (f1 < f2)
            r = right;
        else
            l = left;

        ans = min(ans,min(f1,f2));
    }

    return ans;
}

int main(void) {
    cin>>N;

    for(int i = 1;i <= N;i++) {
        Int x,y;
        char d;
        cin>>x>>y>>d;

        X[i] = x;
        Y[i] = y;
        if(d == 'R') {
            Dx[i] = 1;
        } else if(d == 'L') {
            Dx[i] = -1;
        } else if(d == 'U') {
            Dy[i] = 1;
        } else {
            Dy[i] = -1;
        }
    }

    cout<<fixed<<setprecision(10);
    cout<<solve()<<endl;


    return 0;
}
