#include <bits/stdc++.h>
using namespace std;
string str[370000];
int val[370000];
int n;
set<int> mid;
set<int> b, s;
int main() {
  cin >> n;
  string act;
  int pr;
  long long ans = 1;
  bool isOne = false;
  for (int i = 0; i < n; i++) {
    cin >> act >> pr;
    if (act == "ADD") {
      if (!b.empty() && pr < *b.rbegin())
        b.insert(pr);
      else if (!s.empty() && pr > *s.begin())
        s.insert(pr);
      else {
        if (!mid.empty() && pr >= *mid.begin() && pr <= *mid.rbegin())
          isOne = true;
        mid.insert(pr);
      }
    } else {
      if (!b.empty()) {
        if (pr < *b.rbegin()) {
          cout << 0 << endl;
          return 0;
        }
        if (pr == *b.rbegin()) {
          b.erase(b.find(*b.rbegin()));
          s.insert(mid.begin(), mid.end());
          mid.clear();
          isOne = false;
          continue;
        }
      }
      if (!s.empty()) {
        if (pr > *s.begin()) {
          cout << 0 << endl;
          return 0;
        }
        if (pr == *s.begin()) {
          s.erase(s.begin());
          b.insert(mid.begin(), mid.end());
          mid.clear();
          isOne = false;
          continue;
        }
      }
      if (mid.empty()) {
        cout << 0 << endl;
        return 0;
      }
      mid.erase(mid.find(pr));
      ans = ans * 2;
      ans %= 1000000007;
      for (set<int>::iterator it = mid.begin(); it != mid.end(); it++)
        if (*it < pr)
          b.insert(*it);
        else
          s.insert(*it);
      mid.clear();
      isOne = false;
    }
  }
  int sz = mid.size();
  ans = ans * (sz + 1);
  cout << ans % 1000000007 << endl;
  return 0;
}
