#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,no-stack-protector")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx")
#pragma GCC target("avx,tune=native")
using namespace std;
class CodeHash {
 public:
  string precise(double number, int prec) {
    stringstream ss;
    ss << fixed << setprecision(prec) << number;
    return ss.str();
  }
};
class ScanReader {
 private:
  FILE *stream;
  char buffer[1 << 11];
  bool is_digit[1 << 8];
  int index, total;
  int scan() {
    if (index >= total) {
      index = 0;
      total = fread(buffer, 1, 1 << 11, stream);
      if (total <= 0) return -1;
    }
    return buffer[index++];
  }
  bool iswhitespace(int n) {
    if (n == ' ' || n == '\n' || n == '\t' || n == '\r' || n == -1) return true;
    return false;
  }

 public:
  ScanReader(FILE *stream) {
    this->stream = stream;
    index = total = 0;
    for (int i = 0; i < 1 << 8; i++) is_digit[i] = isdigit(i);
  }
  int scanInt() {
    int integer = 0, temp = scan();
    while (iswhitespace(temp)) temp = scan();
    int neg = 1;
    if (temp == '-') neg *= -1, temp = scan();
    while (!iswhitespace(temp))
      if (is_digit[temp]) integer *= 10, integer += (temp - '0'), temp = scan();
    return neg * integer;
  }
  long long scanLong() {
    long long integer = 0;
    int temp = scan();
    while (iswhitespace(temp)) temp = scan();
    int neg = 1;
    if (temp == '-') neg *= -1, temp = scan();
    while (!iswhitespace(temp))
      if (is_digit[temp]) integer *= 10, integer += (temp - '0'), temp = scan();
    return neg * integer;
  }
  string scanString() {
    string ss = "";
    int temp = scan();
    while (iswhitespace(temp)) temp = scan();
    while (!iswhitespace(temp)) ss += temp, temp = scan();
    return ss;
  }
  double scanDouble() {
    int c = scan();
    while (iswhitespace(c)) c = scan();
    int sgn = 1;
    if (c == '-') sgn = -1, c = scan();
    double res = 0;
    while (!iswhitespace(c) && c != '.') {
      if (c == 'e' || c == 'E') return res * pow(10, scanInt());
      res *= 10;
      res += c - '0';
      c = scan();
    }
    if (c == '.') {
      c = scan();
      double m = 1;
      while (!iswhitespace(c)) {
        if (c == 'e' || c == 'E') {
          return res * pow(10, scanInt());
        }
        m /= 10;
        res += (c - '0') * m;
        c = scan();
      }
    }
    return res * sgn;
  }
};
class PrintWriter {
 private:
  FILE *stream;
  static const int BUFFER_SIZE = (1 << 11) - 1;
  static const int MAX_OUT_SIZE = 23;
  int size;
  char buffer[BUFFER_SIZE];
  void write(long long v) {
    if (v < 0) buffer[size++] = '-', v *= -1;
    if (v < 10)
      buffer[size++] = v + 48;
    else {
      write(v / 10);
      buffer[size++] = v % 10 + 48;
    }
  }

 public:
  PrintWriter(FILE *stream) {
    this->size = 0;
    this->stream = stream;
  }
  void close() {
    if (size) fwrite(buffer, 1, size, stream);
  }
  void println(long long s) {
    if ((size ^ BUFFER_SIZE) < MAX_OUT_SIZE) {
      fwrite(buffer, 1, size, stream);
      size = 0;
    }
    write(s);
    buffer[size++] = '\n';
  }
  void print(long long s) {
    if ((size ^ BUFFER_SIZE) < MAX_OUT_SIZE) {
      fwrite(buffer, 1, size, stream);
      size = 0;
    }
    write(s);
    buffer[size++] = ' ';
  }
  void println(string s) {
    if ((size ^ BUFFER_SIZE) < MAX_OUT_SIZE) {
      fwrite(buffer, 1, size, stream);
      size = 0;
    }
    for (int i = 0; i < s.length(); i++) {
      buffer[size++] = s[i];
      if ((size ^ BUFFER_SIZE) < MAX_OUT_SIZE) {
        fwrite(buffer, 1, size, stream);
        size = 0;
      }
    }
    buffer[size++] = '\n';
  }
  void print(string s) {
    if ((size ^ BUFFER_SIZE) < MAX_OUT_SIZE) {
      fwrite(buffer, 1, size, stream);
      size = 0;
    }
    for (int i = 0; i < s.length(); i++) {
      buffer[size++] = s[i];
      if ((size ^ BUFFER_SIZE) < MAX_OUT_SIZE) {
        fwrite(buffer, 1, size, stream);
        size = 0;
      }
    }
    buffer[size++] = ' ';
  }
};
FILE *fi = fopen("C:\\Users\\khokharnikunj8\\CLionProjects\\CM\\in.txt", "r+");
FILE *fo = fopen("C:\\Users\\khokharnikunj8\\CLionProjects\\CM\\out.txt", "w+");
int main() {
  fi = stdin;
  fo = stdout;
  ScanReader *in = new ScanReader(fi);
  PrintWriter *out = new PrintWriter(fo);
  CodeHash *ch = new CodeHash();
  multiset<int> mt;
  multiset<int> mt1;
  multiset<int> mt2;
  int n = in->scanInt();
  long long ans = 1;
  long long mod = 1000000007;
  while (n--) {
    string s = in->scanString();
    int tt = in->scanInt();
    if (s.length() == 3) {
      if (!mt.empty() && *mt.begin() < tt)
        mt.insert(tt);
      else if (!mt1.empty() && *mt1.rbegin() > tt)
        mt1.insert(tt);
      else
        mt2.insert(tt);
    } else {
      if ((!mt.empty() && *mt.begin() < tt) ||
          (!mt1.empty() && *mt1.rbegin() > tt)) {
        out->println(0);
        out->close();
        return 0;
      }
      if ((!mt.empty() && *mt.begin() == tt)) mt.erase(mt.begin());
      if ((!mt1.empty() && *mt1.rbegin() == tt)) mt1.erase(--mt1.end());
      while (!mt2.empty()) {
        int tl = *mt2.begin();
        mt2.erase(mt2.begin());
        if (tl < tt) {
          mt1.insert(tl);
        } else if (tl > tt) {
          mt.insert(tl);
        } else {
          ans = (ans * 2) % mod;
        }
      }
    }
  }
  out->println((ans * (mt2.size() + 1)) % mod);
  out->close();
  return 0;
}
