#include <bits/stdc++.h>
using namespace std;
typedef struct {
  unsigned short mask;
  char type;
  int qt;
} node;
char num[65536][2];
map<int, int> dp[65536][2];
int main() {
  int cards[16][3], n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    char c;
    cin >> c;
    cards[i][0] = (c == 'R' ? 0 : 1);
    cin >> cards[i][1] >> cards[i][2];
  }
  int lim = (1 << n) - 1;
  for (int i = 0; i <= lim; i++) {
    num[i][0] = num[i][1] = 0;
    for (int j = 0; j < n; j++)
      if (((1 << j) | i) == i) num[i][cards[j][0]]++;
  }
  dp[0][0][0] = 0;
  int menor = INT_MAX;
  long long qt, type, mask, key, qt2, type2, mask2, idx;
  int turns, r, b, binc, rinc, inc;
  for (int mask2 = 0; mask2 <= lim; mask2++)
    for (int type2 = 0; type2 < 2; type2++)
      for (map<int, int>::iterator it = dp[mask2][type2].begin();
           it != dp[mask2][type2].end(); it++) {
        qt2 = it->first;
        turns = it->second;
        if (mask2 == lim) {
          menor = min(turns, menor);
          continue;
        }
        for (int i = 0; i < n; i++) {
          qt = qt2;
          type = type2;
          mask = mask2 | (1 << i);
          if (mask != mask2) {
            r = (type ^ 1) * qt;
            b = type * qt;
            if (cards[i][1] <= num[mask2][0] && cards[i][2] <= num[mask2][1]) {
              if (dp[mask][type].count(qt))
                dp[mask][type][qt] = min(dp[mask][type][qt], turns + 1);
              else {
                dp[mask][type][qt] = turns + 1;
              }
            } else if (cards[i][1] <= num[mask2][0] + r) {
              if (cards[i][2] <= num[mask2][1] + b) {
                qt = qt - cards[i][type + 1] + num[mask2][type];
                if (dp[mask][type].count(qt))
                  dp[mask][type][qt] = min(dp[mask][type][qt], turns + 1);
                else {
                  dp[mask][type][qt] = turns + 1;
                }
              } else {
                binc = cards[i][2] - num[mask2][1] - b;
                type = 0;
                qt = r + binc - max(cards[i][1] - num[mask2][0], 0);
                if (dp[mask][type].count(qt))
                  dp[mask][type][qt] =
                      min(dp[mask][type][qt], turns + binc + 1);
                else {
                  dp[mask][type][qt] = turns + binc + 1;
                }
              }
            } else if (cards[i][2] <= num[mask2][1] + b) {
              rinc = cards[i][1] - num[mask2][0] - r;
              type = 1;
              qt = b + rinc - max(cards[i][2] - num[mask2][1], 0);
              if (dp[mask][type].count(qt))
                dp[mask][type][qt] = min(dp[mask][type][qt], turns + rinc + 1);
              else {
                dp[mask][type][qt] = turns + rinc + 1;
              }
            } else {
              binc = cards[i][2] - num[mask2][1] - b;
              rinc = cards[i][1] - num[mask2][0] - r;
              inc = max(binc, rinc);
              type = (binc > rinc ? 0 : 1);
              qt = abs(binc - rinc);
              if (dp[mask][type].count(qt))
                dp[mask][type][qt] = min(dp[mask][type][qt], turns + inc + 1);
              else {
                dp[mask][type][qt] = turns + inc + 1;
              }
            }
          }
        }
      }
  cout << menor << endl;
  return 0;
}
