// Original C++ solution (slower):
#include <algorithm>

#include <cmath>

#include <cstdio>

#include <iomanip>

#include <iostream>

#include <map>

#include <queue>

#include <set>

#include <string>

#include <vector>



using namespace std;



typedef long long ll;



#define fi first

#define se second

#define mp make_pair

#define pb push_back



#define range(i, a, b, s) for (int i = (a), __##i = (b); i < __##i; i += (s))

#define down(i, a, b, s) for (int i = (a), __##i = (b); __##i < i; i += (s))



const int maxn = 1e5 + 2;



char c[maxn];

int n, x[maxn], y[maxn], dx[maxn], dy[maxn];



long double solve(long double t) {

  long double lx = +1e8, ly = +1e8;

  long double rx = -1e8, ry = -1e8;

  range(i, 0, n, 1) {

    long double xx = x[i] + dx[i] * t;

    long double yy = y[i] + dy[i] * t;

    lx = min(lx, xx);

    ly = min(ly, yy);

    rx = max(rx, xx);

    ry = max(ry, yy);

  }

  return (rx - lx) * (ry - ly);

}



int main(int argc, char const *argv[]) {

  // freopen("F.txt", "r", stdin);



  while (cin >> n) {

    range(i, 0, n, 1) {

      cin >> x[i] >> y[i] >> c[i];

      if (c[i] == 'R') dx[i] = +1, dy[i] = 0;

      if (c[i] == 'L') dx[i] = -1, dy[i] = 0;

      if (c[i] == 'U') dx[i] = 0, dy[i] = +1;

      if (c[i] == 'D') dx[i] = 0, dy[i] = -1;

    }

    long double l = 0, r = 1e8;

    range(_, 0, 300, 1) {

      if (solve((l + l + r) / 3) < solve((l + r + r) / 3))

        r = (l + r + r) / 3;

      else

        l = (l + l + r) / 3;

    }

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

  }

  return 0;

}

// Optimized solution to the same problem (faster):
#include <algorithm>

#include <cmath>

#include <cstdio>

#include <iomanip>

#include <iostream>

#include <map>

#include <queue>

#include <set>

#include <string>

#include <vector>



using namespace std;



typedef long long ll;



#define fi first

#define se second

#define mp make_pair

#define pb push_back



#define range(i, a, b, s) for (int i = (a), __##i = (b); i < __##i; i += (s))

#define down(i, a, b, s) for (int i = (a), __##i = (b); __##i < i; i += (s))



const int maxn = 1e5 + 2;



char c[maxn];

int n, x[maxn], y[maxn], dx[maxn], dy[maxn];



double solve(double t) {

  double lx = +1e8, ly = +1e8;

  double rx = -1e8, ry = -1e8;

  range(i, 0, n, 1) {

    double xx = x[i] + dx[i] * t;

    double yy = y[i] + dy[i] * t;

    lx = min(lx, xx);

    ly = min(ly, yy);

    rx = max(rx, xx);

    ry = max(ry, yy);

  }

  return (rx - lx) * (ry - ly);

}



int main(int argc, char const *argv[]) {

  // freopen("F.txt", "r", stdin);



  while (cin >> n) {

    range(i, 0, n, 1) {

      cin >> x[i] >> y[i] >> c[i];

      if (c[i] == 'R') dx[i] = +1, dy[i] = 0;

      if (c[i] == 'L') dx[i] = -1, dy[i] = 0;

      if (c[i] == 'U') dx[i] = 0, dy[i] = +1;

      if (c[i] == 'D') dx[i] = 0, dy[i] = -1;

    }

    double l = 0, r = 1e8;

    range(_, 0, 300, 1) {

      if (solve((l + l + r) / 3) < solve((l + r + r) / 3))

        r = (l + r + r) / 3;

      else

        l = (l + l + r) / 3;

    }

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

  }

  return 0;

}

// Fastest known solution for this problem: