#include <bits/stdc++.h>
using namespace std;
int n, m, x, y, ans, f[200005];
char s[11];
int find(int k) {
  if (k == f[k]) return k;
  return f[k] = find(f[k]);
}
void add(int x, int y) {
  if (find(x) != find(y)) f[find(x)] = find(y);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= 2 * n + 3; i++) f[i] = i;
  for (int i = 1; i <= m; i++) {
    scanf("%d%d%s", &x, &y, s);
    x -= y;
    y = min(x + 2 * y, 2 * n - x - 2 * y + 2);
    x = max(x, -x);
    if (s[0] == 'x') {
      add(2 * y, 2 * x);
      add(2 * y + 1, 2 * x + 1);
    } else {
      add(2 * y + 1, 2 * x);
      add(2 * x + 1, 2 * y);
    }
  }
  for (int i = 0; i <= n + 1; i++)
    if (find(2 * i) == find(2 * i + 1)) {
      printf("0");
      return 0;
    }
  int s = 0;
  for (int i = 0; i <= 2 * n + 3; i++) s += (find(i) == i);
  s = s / 2 - 2;
  ans = 1;
  for (int i = 1; i <= s; i++) ans = ans * 2 % 1000000007;
  printf("%d", ans);
}
