#include <bits/stdc++.h>
using namespace std;
const int N = 16, Inf = 1e9, lastS = (1 << N) - 1;
static int n, sqrn, R, B, ans, lasts;
struct TCard {
  bool c;
  int r, b;
} card[N];
static int f[lastS][N * N + 1][2], cardr[lastS], cardb[lastS];
inline int GetF(int s, int rem, bool c) {
  rem = min(rem, sqrn);
  if (s == lasts) return 0;
  auto &fs = f[s][rem][c];
  if (fs != -1) return fs;
  fs = Inf;
  for (int i = 0; i < n; ++i) {
    if (s & 1 << i) continue;
    int R = max(0, card[i].r - cardr[s]), B = max(0, card[i].b - cardb[s]),
        turn, _r, _b;
    if (c) {
      turn = max(R - rem, B);
      _r = rem + turn - R;
      _b = turn - B;
    } else {
      turn = max(B - rem, R);
      _b = rem + turn - B;
      _r = turn - R;
    }
    if (_r)
      fs = min(fs, turn + GetF(s ^ 1 << i, _r, 1));
    else
      fs = min(fs, turn + GetF(s ^ 1 << i, _b, 0));
  }
  return fs;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  sqrn = n * n;
  lasts = (1 << n) - 1;
  for_each(card, card + n, [](TCard &C) {
    char tmp;
    cin >> tmp >> C.r >> C.b;
    C.c = tmp == 'R';
    if (C.r > n) R += C.r - n, C.r = n;
    if (C.b > n) B += C.b - n, C.b = n;
  });
  for (int s = 1; s <= lasts; ++s) {
    int i = __builtin_ctz(s);
    cardr[s] = cardr[s ^ 1 << i] + card[i].c;
    cardb[s] = cardb[s ^ 1 << i] + !card[i].c;
  }
  memset(f, -1, sizeof f);
  if (R > B)
    ans = R + GetF(0, R - B, 0);
  else
    ans = B + GetF(0, B - R, 1);
  cout << ans + n;
  return 0;
}
