Problem:
Score : 600 points

Problem Statement

There are 2N balls, N white and N black, arranged in a row. The integers from 1 through N are written on the white balls, one on each ball, and they are also written on the black balls, one on each ball.
The integer written on the i-th ball from the left (1 ≤ i ≤ 2N) is a_i, and the color of this ball is represented by a letter c_i.
c_i = W represents the ball is white; c_i = B represents the ball is black.

Takahashi the human wants to achieve the following objective:

For every pair of integers (i,j) such that 1 ≤ i < j ≤ N, the white ball with i written on it is to the left of the white ball with j written on it.

For every pair of integers (i,j) such that 1 ≤ i < j ≤ N, the black ball with i written on it is to the left of the black ball with j written on it.

In order to achieve this, he can perform the following operation:

Swap two adjacent balls.

Find the minimum number of operations required to achieve the objective.

Constraints

1 ≤ N ≤ 2000

1 ≤ a_i ≤ N

c_i = W or c_i = B.

If i ≠ j, (a_i,c_i) ≠ (a_j,c_j).

Input

Input is given from Standard Input in the following format:

N
c_1 a_1
c_2 a_2
:
c_{2N} a_{2N}

Output

Print the minimum number of operations required to achieve the objective.

Sample Input 1

3
B 1
W 2
B 3
W 1
W 3
B 2

Sample Output 1

4

The objective can be achieved in four operations, for example, as follows:

Swap the black 3 and white 1.

Swap the white 1 and white 2.

Swap the black 3 and white 3.

Swap the black 3 and black 2.

Sample Input 2

4
B 4
W 4
B 3
W 3
B 2
W 2
B 1
W 1

Sample Output 2

18

Sample Input 3

9
W 3
B 1
B 4
W 1
B 5
W 9
W 2
B 6
W 5
B 3
W 8
B 9
W 7
B 2
B 8
W 4
W 6
B 7

Sample Output 3

41

Solution in C++14 (GCC 5.4.1) (judge verdict: Time Limit Exceeded)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef std::pair<int, int> ii;
typedef tuple<int,int,int> i3;
typedef std::pair<int, ii> iii;
typedef std::vector<int> vi;
typedef std::vector<vi> vvi;
typedef std::vector<ii> vii;
typedef std::vector<iii> viii;
const int INF=1000000;
#define pb(a) push_back(a)
#define m0(x) memset(x,-1,sizeof(x))
#define print(x) cout<<x<<endl;
#define pe(x) cout<<x<<" ";
#define lb(v,n) lower_bound(v.begin(), v.end(), n);
#define ub(v,n) upper_bound(v.begin(), v.end(), n);
#define all(x) (x).begin(), (x).end()
const int N=4005;
int n;
vector<pair<char,int>> a(2*N);
int memo[2001][2001];

int dp(int w, int b){
  if (w==0 and b==0) return 0;
  
  if (memo[w][b]!=-1) return memo[w][b];

  int ans1=0;
  for (int i=2*n-1; i>0; i--){
    if (a[i].first=='B' and a[i].second<=b) ans1++;
    if (a[i].first=='W' and a[i].second<w) ans1++;
    if (a[i].first=='W' and a[i].second==w) break;
  }

  //case 2 add black
  int nb=b+1;
  int ans2=0;
  for (int i=2*n-1; i>0; i--){
    if (a[i].first=='B' and a[i].second<b) ans2++;
    if (a[i].first=='W' and a[i].second<=w) ans2++;
    if (a[i].first=='B' and a[i].second==b) break;
  }
  int anst=INF;
  if (w-1>=0) anst=min(anst,dp(w-1,b)+ans1);
  if (b-1>=0) anst=min(anst,dp(w,b-1)+ans2);
  return memo[w][b]=anst;
}


int main(){
  ios_base::sync_with_stdio(false);
  cin.tie(NULL); cout.tie(NULL);
  memset(memo,-1,sizeof memo);
  int t;
  char s;
  cin >> n;
  
  for (int i=0; i<2*n; i++){
    cin >> s >> t;
    a[i]={s,t};
  }
  //for (auto i: a) cout<<i.first<<" "<<i.second<<endl;

  cout<<dp(n,n);




}