#include <bits/stdc++.h>

using namespace std;

/* g++ -g -fsanitize=address -lasan -std=c++11 -Dfoo_ */

/* freopen("input.txt", "rt", stdin); */
/* freopen("output.txt", "wt", stdout); */

#define ALL(c)          (c).begin(), (c).end()
#define ALLR(c)         (c).rbegin(), (c).rend()
#define FOR(i,a,b)      for (int i=(a); i < (b); ++i)
#define FORR(i,a,b)     for (int i=(a); i > (b); --i)
#define FOR_ALL(i,c)    for (__typeof((c).begin()) i=(c).begin();   \
                             i != (c).end(); ++i)
#define FOR_ALLR(i,c)   for (__typeof((c).rbegin()) i=(c).rbegin(); \
                             i != (c).rend(); ++i)
#define SZ(array)       (sizeof(array)/sizeof(array[0]))
#define lc(x)           (x<<1)     /* 2*x */
#define rc(x)           (x<<1 | 1) /* 2*x+1 */
#define lowbit(x)       (x & (-x)) /* 0b10100 -> 0b100 */

typedef long long       LL;
typedef map<int,int>    MII;
typedef pair<int,int>   PII;
typedef set<int>        SI;
typedef vector<bool>    VB;
typedef vector<double>  VD;
typedef vector<int>     VI;
typedef vector<string>  VS;

/* check if a key is in container C */
template <class C>
inline bool in_(const typename C::key_type& k, const C& A)
{ return A.find(k) != A.end(); }
inline bool in_(const string& s, const string& S)
{ return S.find(s) != string::npos; }

/* the shape of the curve is either a V-shape or /-shape */

const int inf = 1e9;
const int maxx = 1e8;
const int maxy = 1e8;
int fx[2],fy[2]; vector<int> L,R,U,D;

double calc(const double t)
{
    vector<double> X,Y;
    /* watch out the case where this is no fixed x or y */
    FOR(i,0,2) if (-maxx <= fx[i] && fx[i] <= maxx)
        X.push_back(fx[i]);
    FOR(i,0,2) if (-maxy <= fy[i] && fy[i] <= maxy)
        Y.push_back(fy[i]);
    if (L.size())
        X.push_back(L[0]-t), X.push_back(L.back()-t);
    if (R.size())
        X.push_back(R[0]+t), X.push_back(R.back()+t);
    if (U.size())
        Y.push_back(U[0]+t), Y.push_back(U.back()+t);
    if (D.size())
        Y.push_back(D[0]-t), Y.push_back(D.back()-t);
    sort(ALL(X)); sort(ALL(Y));
    assert(X.size() && Y.size());
    return (X.back()-X[0]) * (Y.back()-Y[0]);
}

int main()
{
#ifdef foo_
    freopen("foo", "rt", stdin);
#endif
    ios::sync_with_stdio(false);
    int n;
    while (cin >> n) {
        L.clear(); R.clear(); U.clear(); D.clear();
        fx[0] = fy[0] = inf; fx[1] = fy[1] = -inf;
        FOR(i,0,n) {
            int x,y; char d; cin >> x >> y >> d;
            if (d == 'L')       /* only x change, y fixed */
                L.push_back(x), fy[0]=min(fy[0],y), fy[1]=max(fy[1],y);
            if (d == 'R')       /* only x change, y fixed */
                R.push_back(x), fy[0]=min(fy[0],y), fy[1]=max(fy[1],y);
            if (d == 'U')       /* only y change, x fixed */
                U.push_back(y), fx[0]=min(fx[0],x), fx[1]=max(fx[1],x);
            if (d == 'D')       /* only y change, x fixed */
                D.push_back(y), fx[0]=min(fx[0],x), fx[1]=max(fx[1],x);
        }
        sort(ALL(L)); sort(ALL(R)); sort(ALL(U)); sort(ALL(D));
        double lft = 0, rht = inf;
        FOR(_,0,500) {
            const double m1 = lft + (rht-lft)/3.0;
            const double m2 = rht - (rht-lft)/3.0;
            const double v1 = calc(m1);
            const double v2 = calc(m2);
            if (v1 <= v2)
                rht = m2;
            else
                lft = m1;
        }
        /* printf("%.10f\n",calc(lft)); */ /* got precision error */
        /* printf("%.10f\n",calc(rht)); */ /* AC, when v1=v2 rht move */
        printf("%.10f\n",min(calc(lft),calc(rht)));
    }
    return 0;
}


Measured memory_bytes: 896