#include<bits/stdc++.h>
using namespace std;
const long long N=4005;
char c[N];
long long a[N],tree[2][N],cntb[N][N],cntw[N][N],ind[2][N];
long long dp[N][N];
long long prev(long long x)
{
return (x&(x-1));
}
long long next(long long x)
{
return 2*x-prev(x);
}
void update(long long type, long long ind, long long diff)
{
while(ind<=2*N)
{
tree[type][ind]+=diff;
ind=next(ind);
}
}
long long get(long long type, long long ind1, long long ind2)
{
long long ans=0;
while(ind2)
{
ans+=tree[type][ind2];
ind2=prev(ind2);
}
ind1--;
while(ind1)
{
ans-=tree[type][ind1];
ind1=prev(ind1);
}
return ans;
}
int main()
{
long long n;
cin>>n;
for(long long i=1;i<=2*n;i++)
{
cin>>c[i]>>a[i];
ind[c[i]=='W'][a[i]]=i;
}
for(long long i=0;i<n;i++)
{
cntb[i][0]=get(0,ind[0][i+1]+1,2*n);
for(long long j=1;j<=n;j++)
{
update(1,ind[1][j],1);
cntb[i][j]=get(1,ind[0][i+1]+1,2*n)+cntb[i][0];
}
for(long long j=1;j<=n;j++)
update(1,ind[1][j],-1);
update(0,ind[0][i+1],1);
}
for(long long i=0;i<n;i++)
update(0,ind[0][i+1],-1);
for(long long i=0;i<n;i++)
{
cntw[i][0]=get(1,ind[1][i+1]+1,2*n);
for(long long j=1;j<=n;j++)
{
update(0,ind[0][j],1);
cntw[i][j]=get(0,ind[1][i+1]+1,2*n)+cntw[i][0];
}
for(long long j=1;j<=n;j++)
update(0,ind[0][j],-1);
update(1,ind[1][i+1],1);
}
/*cout<<"Cntb: "<<endl;
for(long long i=0;i<n;i++)
{
for(long long j=0;j<=n;j++)
cout<<i<<" "<<j<<" "<<cntb[i][j]<<endl;
cout<<endl;
}
cout<<endl;
cout<<"Cntw: "<<endl;
for(long long i=0;i<n;i++)
{
for(long long j=0;j<=n;j++)
cout<<i<<" "<<j<<" "<<cntw[i][j]<<endl;
cout<<endl;
}
cout<<endl;*/
dp[0][0]=0;
for(long long i=0;i<=n;i++)
{
for(long long j=0;j<=n;j++)
{
if(i==0 && j==0) continue;
if(i==0)
dp[i][j]=dp[i][j-1]+cntw[j-1][i];
else if(j==0)
dp[i][j]=dp[i-1][j]+cntb[i-1][j];
else
dp[i][j]=min(dp[i-1][j]+cntb[i-1][j],dp[i][j-1]+cntw[j-1][i]);
}
}
/*cout<<"Dp:"<<endl;
for(long long i=0;i<=n;i++)
{
for(long long j=0;j<=n;j++)
cout<<i<<" "<<j<<" "<<dp[i][j]<<endl;
cout<<endl;
}
cout<<endl;*/
cout<<dp[n][n]<<endl;
return 0;
}