Problem: There are N points in a two-dimensional plane. The initial coordinates of the i-th point are (x_i, y_i). Now, each point starts moving at a speed of 1 per second, in a direction parallel to the x- or y- axis. You are given a character d_i that represents the specific direction in which the i-th point moves, as follows:

* If d_i = `R`, the i-th point moves in the positive x direction;
* If d_i = `L`, the i-th point moves in the negative x direction;
* If d_i = `U`, the i-th point moves in the positive y direction;
* If d_i = `D`, the i-th point moves in the negative y direction.



You can stop all the points at some moment of your choice after they start moving (including the moment they start moving). Then, let x_{max} and x_{min} be the maximum and minimum among the x-coordinates of the N points, respectively. Similarly, let y_{max} and y_{min} be the maximum and minimum among the y-coordinates of the N points, respectively.

Find the minimum possible value of (x_{max} - x_{min}) \times (y_{max} - y_{min}) and print it.

Constraints

* 1 \leq N \leq 10^5
* -10^8 \leq x_i,\ y_i \leq 10^8
* x_i and y_i are integers.
* d_i is `R`, `L`, `U`, or `D`.

Input

Input is given from Standard Input in the following format:


N
x_1 y_1 d_1
x_2 y_2 d_2
.
.
.
x_N y_N d_N


Output

Print the minimum possible value of (x_{max} - x_{min}) \times (y_{max} - y_{min}).

The output will be considered correct when its absolute or relative error from the judge's output is at most 10^{-9}.

Examples

Input

2
0 3 D
3 0 L


Output

0


Input

5
-7 -10 U
7 -6 U
-8 7 D
-3 3 D
0 -6 R


Output

97.5


Input

20
6 -10 R
-4 -9 U
9 6 D
-3 -2 R
0 7 D
4 5 D
10 -10 U
-1 -8 U
10 -6 D
8 -5 U
6 4 D
0 3 D
7 9 R
9 -4 R
3 10 D
1 9 U
1 -6 U
9 -8 R
6 7 D
7 -3 D


Output

273

Solution (in CPP):

Solution:
#include "bits/stdc++.h"
using namespace std;
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define ll long long int
#define int ll
// #define double long double
//#define slld(t) scanf("%lld",&t)
//#define sd(t) scanf("%d",&t)
//#define pd(t) printf("%d\n",t)
//#define plld(t) printf("%lld\n",t)
#define vec vector < int >
#define vecp vector < pair < int , int > >
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
#define debug(x)   cerr<<#x<<": "<<x<<endl
#define pii pair < int , int >
#define pll pair < ll , ll > 
#define debug(x)   cerr<<#x<<": "<<x<<endl
#define mod  1000000007
#define N   100005
#define MAX 300005
#define mod1 1000000007
#define mod2 998244353
#define bitcnt __builtin_popcountll
#define PI acos(-1)
//#define endl "\n"
#define inf 1e+15
char d[N];
long double x[N],y[N];
int n;
long double f(long double t){
	long double xmax = -inf , xmin=inf , ymax= -inf , ymin= inf;
	for(int i=0;i<n;i++){
		if(d[i]=='L') xmin=min(xmin,x[i]-t) , xmax=max(xmax,x[i]-t);
		else if(d[i]=='R') xmin=min(xmin,x[i]+t),xmax=max(xmax,x[i]+t);
		else
			xmax=max(xmax,x[i]),xmin=min(xmin,x[i]);
	}
	for(int i=0;i<n;i++){
		if(d[i]=='D') ymin=min(ymin,y[i]-t) , ymax=max(ymax,y[i]-t);
		else if(d[i]=='U') ymin=min(ymin,y[i]+t),ymax=max(ymax,y[i]+t);
		else
			ymax=max(ymax,y[i]),ymin=min(ymin,y[i]);
	}
	return (xmax-xmin)*(ymax-ymin);

}
signed main(){
  fast;
  cin>>n;
  for(int i=0;i<n;i++) cin>>x[i]>>y[i]>>d[i];

  long double l = 0 , r = 1000000000,md1,md2;
  for(int j=1;j<=1000;j++){
  	  md1=l+(r-l)/3 , md2= l+(r-l)*2/3;
  	  if(f(md1)<=f(md2)) r=md2;
  	  else l = md1;
  }
  cout<<fixed<<setprecision(12)<<f(r)<<endl;
}