#include <bits/stdc++.h>
using namespace std;
int tick[100][100][5];
unsigned long long dp[100][100];
int n, k;
void update(int x, int y, string s) {
  int l = s.size();
  if (l == 1) {
    if (s[0] == '=') tick[x][y][0] = tick[y][x][0] = 1;
    if (s[0] == '<') tick[x][y][1] = tick[y][x][2] = 1;
    if (s[0] == '>') tick[x][y][2] = tick[y][x][1] = 1;
  }
  if (l == 2) {
    if (s[0] == '<') tick[x][y][3] = tick[y][x][4] = 1;
    if (s[0] == '>') tick[x][y][4] = tick[y][x][3] = 1;
  }
}
int check(int l, int r, int x, int y) {
  if (tick[x][y][1] | tick[x][y][2]) return 0;
  for (int i = 1; i <= l; i++) {
    if (tick[x][i][0] | tick[x][i][1] | tick[x][i][3]) return 0;
    if (tick[y][i][0] | tick[y][i][1] | tick[y][i][3]) return 0;
  }
  for (int i = r; i <= 2 * n; i++) {
    if (tick[x][i][0] | tick[x][i][1] | tick[x][i][3]) return 0;
    if (tick[y][i][0] | tick[y][i][1] | tick[y][i][3]) return 0;
  }
  return 1;
}
int main() {
  cin >> n >> k;
  for (int i = 1; i <= k; i++) {
    int x, y;
    string s;
    cin >> x >> s >> y;
    update(x, y, s);
  }
  for (int i = 1; i < 2 * n; i++) dp[i][i + 1] = check(i - 1, i + 2, i, i + 1);
  for (int j = 4; j <= 2 * n; j++)
    for (int i = j - 3; i >= 1; i--)
      if ((j - i) % 2) {
        dp[i][j] = 0;
        if (check(i - 1, j + 1, i, i + 1)) dp[i][j] += dp[i + 2][j];
        if (check(i - 1, j + 1, j - 1, j)) dp[i][j] += dp[i][j - 2];
        if (check(i - 1, j + 1, i, j)) dp[i][j] += dp[i + 1][j - 1];
      }
  cout << dp[1][2 * n];
  return 0;
}
