#include <bits/stdc++.h>
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n)  for(int i=0;i<(n);++i)
#define REPr(i,n) for(int i=(n)-1;i>=0; --i)
#define FORq(i, m, n) for(int i = (m);i <= (n);++i)
#define FORqr(i, m , n) for(int i = (n);i >=(m);--i)
#define SCD(n) scanf("%d",&n)
#define SCD2(m,n) scanf("%d%d",&m,&n)
#define SCD3(m,n,k) scanf("%d%d%d",&m,&n,&k)
#define SCLLD(n) scanf("%lld",&n)
#define SCLLD2(m,n) scanf("%lld%lld",&m,&n)
#define SCLLD3(m,n,k) scanf("%lld%lld%lld",&m,&n,&k)
#define PB push_back
#define MP make_pair
#define ARSCD(A,N) REP(i,N){SCD(A[i]);}
#define ARSCD1(A,N) FORq(i,1,N){SCD(A[i]);}
#define VSCD(v,N) REP(i,N){int (x); SCD(x); v.PB(x);}
#define VSCLLD(v,N) REP(i,N){long long (x); SCLLD(x); v.PB(x);}
#define PRINTD(n) printf("%d\n",n)
#define PRINTLLD(n) printf("%lld\n",n)
#define DEBUG printf("%s\n","debug")
#define fst first
#define snd second
#define SIN(x,S) (S.count(x) != 0)
#define M0(x) memset(x,0,sizeof(x))
#define FILL(x,y) memset(x,y,sizeof(x))
#define MM(x) memset(x,-1,sizeof(x))
#define ALL(x) (x).begin(),(x).end()
using namespace std;
typedef pair<int,int> PII;
typedef pair<long long,long long> PLL;
typedef vector<int> VI;
typedef vector < VI > VVI;
typedef vector<long long> VL;
typedef long long ll;
typedef long long integer;
///////////////////////////////////////////////
const ll MOD = 1000000007;
ll gcd(ll x,ll y){return y?gcd(y,x%y):x;}
 
template<class T> inline bool chmin(T& a, T b) {
    if (a > b) {
        a = b;
        return true;
    }
    return false;
}
template<class T> inline bool chmax(T& a, T b) {
    if (a < b) {
        a = b;
        return true;
    }
    return false;
}
///////////////////////////////////////////////
int main(){
    int N;
    cin >> N;
    int Bl[2002] = {};
    int Wl[2002] = {};
    int Bs[2002] = {};
    int Ws[2002] = {};

    vector<int> W;
    vector<int> B;
    vector<pair<char,int> >ball;

    REP(i,2*N){
        char color;
        int num;
        cin >> color >> num;

        if (color == 'W') W.PB(num);
        else B.PB(num);
        num--;
        ball.PB(MP(color,num));
    }

    vector<VI> black(N,vector<int>(N+1,0));
    vector<VI> white(N,vector<int>(N+1,0));

    VI bnum(N,0);
    VI wnum(N,0);
    REP(k,2*N){
        char c = ball[k].fst;
        int num = ball[k].snd;
        VI wsum(N+1,0), bsum(N+1,0);
        FORqr(l,1,N){
            bsum[l-1] = bsum[l] + bnum[l-1];
            wsum[l-1] = wsum[l] + wnum[l-1];
        }

        FORqr(l,1,N+1){
            if (c == 'B') black[num][l-1] = wsum[l-1] + bsum[num+1];
            if (c == 'W') white[num][l-1] = wsum[num+1] + bsum[l-1];
        }

        if (c == 'B') bnum[num]++;
        else wnum[num]++;
    }


    static int dp[2002][2002] = {};
    REP(i,2002){ REP(j,2002) { dp[i][j] = 1000000000;}}
    dp[0][0] = 0;

    FORq(i,0,N){
        FORq(j,0,N){
            if (i < N) dp[i+1][j] = min(dp[i+1][j],dp[i][j]+black[i][j]);
            if (j < N) dp[i][j+1] = min(dp[i][j+1],dp[i][j]+white[j][i]);
        }
    }

    FORq(i,1,N){
     //   cout << Wl[i] << " ";
    }

    FORq(i,0,N){
        FORq(j,0,N){
       //     printf("(%d,%d) = %d\n",i,j,dp[i][j]);
        }
    }

    cout << dp[N][N] << endl;
}






Measured memory_bytes: 47360