#include <bits/stdc++.h>
using namespace std;
long long int modulo = 1e9 + 7;
struct eq {
  int l, r, c;
  eq() {}
  eq(int inl, int inr, int inc) {
    l = inl;
    r = inr;
    c = inc;
  }
};
bool operator<(eq e1, eq e2) {
  return e1.l > e2.l or (e1.l == e2.l and e1.r > e2.r);
}
int solucion(priority_queue<eq> &q, int n) {
  if (int(q.size()) == 0) return n;
  int len = q.top().l;
  while (not q.empty()) {
    eq e = q.top();
    q.pop();
    while (not q.empty() and q.top().l == e.l) {
      eq ee = q.top();
      q.pop();
      if (ee.r == e.r) {
        if (ee.c != e.c) {
          cout << 0 << endl;
          exit(0);
        }
      } else {
        q.push(eq(e.r + 1, ee.r, e.c ^ ee.c));
      }
      e = ee;
    }
    if (q.empty())
      len += n - (e.l + 1);
    else
      len += q.top().l - (e.l + 1);
  }
  return len;
}
priority_queue<eq> q[2];
int main() {
  ios::sync_with_stdio(false);
  int n, k;
  cin >> n >> k;
  for (int d = 0; d < k; d++) {
    int i, j;
    char c;
    cin >> i >> j >> c;
    if (i > j) swap(i, j);
    if (i > n - j + 1) {
      int ii = n - j + 1;
      int jj = n - i + 1;
      i = ii;
      j = jj;
    }
    i--;
    j--;
    int iq = (i + j) % 2;
    if (iq) j--;
    q[iq].push(eq((j - i) / 2, (j + i) / 2, c == 'o'));
  }
  int len = solucion(q[0], (n + 1) / 2);
  len += solucion(q[1], n / 2);
  long long int sol = 1;
  for (int i = 0; i < len; i++) sol = 2 * sol % modulo;
  cout << sol << endl;
}
