#include <bits/stdc++.h>
using namespace std;
template <class T>
ostream& operator<<(ostream& stream, const vector<T> v) {
  stream << "[ ";
  for (int i = 0; i < (int)v.size(); i++) stream << v[i] << " ";
  stream << "]";
  return stream;
}
long long fpow(long long x, long long p, long long m) {
  long long r = 1;
  for (; p; p >>= 1) {
    if (p & 1) r = r * x % m;
    x = x * x % m;
  }
  return r;
}
long long inv(long long a, long long b) {
  return a < 2 ? a : ((a - inv(b % a, a)) * b + 1) / a % b;
}
int gcd(int a, int b) {
  if (!b) return a;
  return gcd(b, a % b);
}
long long gcd(long long a, long long b) {
  if (!b) return a;
  return gcd(b, a % b);
}
const long long mod = 1000000007;
long long N, p;
set<long long> buy, sell, indet;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> N;
  int i;
  long long res = 1;
  for (i = 1; i <= N; i++) {
    string op;
    long long x;
    cin >> op >> x;
    if (op == "ADD") {
      if (!buy.empty() && (*buy.rbegin()) > x)
        buy.insert(x);
      else if (!sell.empty() && x > (*sell.begin()))
        sell.insert(x);
      else
        indet.insert(x);
    } else {
      if (!buy.empty() && (*buy.rbegin() >= x)) {
        if (*buy.rbegin() != x) {
          cout << 0 << "\n";
          return 0;
        }
        buy.erase(x);
        sell.insert((indet).begin(), (indet).end());
        indet.clear();
      } else if (!sell.empty() && *sell.begin() <= x) {
        if (*sell.begin() != x) {
          cout << 0 << "\n";
          return 0;
        }
        sell.erase(x);
        buy.insert((indet).begin(), (indet).end());
        indet.clear();
      } else {
        for (int v : indet)
          if (v < x)
            buy.insert(v);
          else if (v > x)
            sell.insert(v);
        indet.clear();
        res = res * 2 % mod;
      }
    }
  }
  res = res * (indet.size() + 1) % mod;
  cout << res << "\n";
}
