#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
inline void chkmax(T& x, U y) {
  if (x < y) x = y;
}
template <typename T, typename U>
inline void chkmin(T& x, U y) {
  if (y < x) x = y;
}
int n;
const int INF = 1 << 30;
const int MAXN = 1 << 16;
int a[2][16], c[17];
int dp[MAXN][122];
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    char s[3];
    scanf("%s%d%d", s, &a[0][i], &a[1][i]);
    c[i] = (s[0] == 'B');
  }
  for (int i = 0; i <= n * (n - 1) / 2; i++) {
    for (int j = 0; j < (1 << (n)); j++) dp[j][i] = -INF;
  }
  dp[0][0] = 0;
  for (int i = 0; i < (1 << (n)); i++) {
    int red = 0, blue = 0;
    for (int k = 0; k < n; k++) {
      if (i >> k & 1) {
        if (!c[k])
          red++;
        else
          blue++;
      }
    }
    for (int k = n * (n - 1) / 2; k >= 0; k--) {
      if (dp[i][k] == -INF) continue;
      for (int j = 0; j < n; j++) {
        if (i >> j & 1) continue;
        int add = min(a[0][j], red);
        chkmax(dp[i | (1 << (j))][k + add], dp[i][k] + min(blue, a[1][j]));
      }
    }
  }
  int sum = 0, ans = 0;
  for (int i = 0; i < n; i++) sum += a[1][i], ans += a[0][i];
  int ret = INF;
  for (int i = 0; i <= n * (n - 1) / 2; i++) {
    if (dp[(1 << (n)) - 1][i] == -INF) continue;
    chkmin(ret, max(ans - i, sum - dp[(1 << (n)) - 1][i]));
  }
  cout << ret + n << endl;
  return 0;
}
