#include <bits/stdc++.h>
using namespace std;
struct card {
  char col;
  int r, b;
};
int n;
card choices[16 + 1];
int dp[2][16 * 16 + 1][1 << 16];
int countred[1 << 16];
int countblue[1 << 16];
int solve(int mask, int redempty, int other);
int lowbit(int x);
void init(int x, int y, int z, int value);
int main() {
  int needred = 0, needblue = 0;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> choices[i].col >> choices[i].r >> choices[i].b;
    needred += max(0, choices[i].r - n);
    needblue += max(0, choices[i].b - n);
    choices[i].r = min(n, choices[i].r);
    choices[i].b = min(n, choices[i].b);
  }
  int base = max(needred, needblue);
  for (int i = 1; i < 1 << n; i++) {
    int lb = lowbit(i & -i);
    countred[i] = countred[i ^ (1 << lb)];
    countblue[i] = countblue[i ^ (1 << lb)];
    if (choices[lb].col == 'R')
      countred[i]++;
    else
      countblue[i]++;
  }
  init(2, n * n + 1, 1 << n, -1);
  int ans = base + n;
  if (needred < needblue) {
    ans += solve(0, 0, needblue - needred);
  } else {
    ans += solve(0, 1, needred - needblue);
  }
  cout << ans << '\n';
  return 0;
}
void init(int x, int y, int z, int value) {
  for (int i = 0; i < x; i++)
    for (int j = 0; j < y; j++)
      for (int k = 0; k < z; k++) dp[i][j][k] = value;
}
int lowbit(int x) {
  int nr = 0;
  while (x != 0) {
    if (x & 1 == 1)
      break;
    else {
      nr++;
      x = x >> 1;
    }
  }
  return nr;
}
int solve(int mask, int redempty, int other) {
  other = min(other, n * n);
  if (mask == (1 << n) - 1) return 0;
  if (dp[redempty][other][mask] != -1) return dp[redempty][other][mask];
  int ret = numeric_limits<int>::max();
  for (int i = 0; i < n; i++) {
    if (((mask >> i) & 1) == 1) continue;
    int pm = mask | (1 << i), havered, haveblue;
    if (redempty == 1) {
      havered = 0;
      haveblue = other;
    } else {
      havered = other;
      haveblue = 0;
    }
    int cardred = countred[mask];
    int cardblue = countblue[mask];
    int nred = max(0, choices[i].r - (cardred + havered));
    int nblue = max(0, choices[i].b - (cardblue + haveblue));
    int movesneeded = max(nred, nblue);
    int nextred = havered + movesneeded - max(0, choices[i].r - cardred);
    int nextblue = haveblue + movesneeded - max(0, choices[i].b - cardblue);
    if (nextred == 0) {
      ret = min(ret, movesneeded + solve(pm, 1, nextblue));
    }
    if (nextblue == 0) {
      ret = min(ret, movesneeded + solve(pm, 0, nextred));
    }
  }
  dp[redempty][other][mask] = ret;
  return ret;
}
