#include<bits/stdc++.h> using namespace std; const int maxn=16,INF=0x3f3f3f3f; char type[maxn]; int R[maxn],B[maxn]; char readchar() { for(;;) { char ch=getchar(); if(!isspace(ch)) { return ch; } } } int n; typedef pair<int,int> pii; typedef set<pii> Spii; Spii dp[1<<maxn]; void Insert(Spii& s,const pii& p) { Spii::iterator it=s.lower_bound(p); if(it==s.begin()||(--it)->second>p.second) { s.insert(p); it=s.upper_bound(p); while(it!=s.end()&&it->second>=p.second) { s.erase(it++); } } } void DP(int s) { Spii& res=dp[s]; if(res.size()) { return; } if(s==0) { res.insert(make_pair(0,0)); return; } int curR=0,curB=0; for(int i=0;i<n;i++) { if(!((s&(1<<i)))) { if(type[i]=='R') { curR++; } else { curB++; } } } for(int i=0;i<n;i++) { if(s&(1<<i)) { DP(s&(~(1<<i))); Spii& tmp=dp[s&(~(1<<i))]; for(Spii::iterator it=tmp.begin();it!=tmp.end();it++) { Insert(res,make_pair(it->first+max(0,R[i]-curR),it->second+max(0,B[i]-curB))); } } } } int main() { cin>>n; for(int i=0;i<n;i++) { type[i]=readchar(); cin>>R[i]>>B[i]; } DP((1<<n)-1); int ans=INF; Spii& res=dp[(1<<n)-1]; for(Spii::iterator it=res.begin();it!=res.end();it++) { ans=min(ans,max(it->first,it->second)+n); } cout<<ans<<endl; return 0; }