#include <bits/stdc++.h>   using namespace std;   #pragma comment(linker,  /STACK:16777216 )   const int inf = 0x3f3f3f3f;   const long double pi = acos(-1.0);   const string debug_line =  yolo ;   const double PI = 4 * atan(1);   long long dp[81][81];   bool visited[81][81];   vector<pair<int, int> > Adj[81];   int n;   vector<pair<pair<int, int>, string> > edge;   bool check(int l, int r, int l1, int r1, int index1, int index2) {     for (auto &(t1) : (Adj[index1])) {       int op = t1.first;       if (op == 0) {         if (t1.second != index2 && t1.second != index1) {           return false;         }       } else if (op == 2) {         if (t1.second <= l1 || t1.second >= r1) {           return false;         }       } else if (op == 1) {         if (t1.second > l && t1.second < r) {           return false;         }       } else if (op == 3) {         if (!(t1.second > l && t1.second < r)) {           return false;         }       } else if (op == 4) {         if (!(t1.second <= l1 || t1.second >= r1)) {           return false;         }       }     }     for (auto &(t1) : (Adj[index2])) {       int op = t1.first;       if (op == 0) {         if (t1.second != index1 && t1.second != index2) {           return false;         }       } else if (op == 2) {         if (t1.second <= l1 || t1.second >= r1) {           return false;         }       } else if (op == 1) {         if (t1.second > l && t1.second < r) {           return false;         }       } else if (op == 3) {         if (!(t1.second > l && t1.second < r)) {           return false;         }       } else if (op == 4) {         if (!(t1.second <= l1 || t1.second >= r1)) {           return false;         }       }     }     return true;   }   int main() {     int k;     scanf( %d%d , &n, &k);     for (int(i) = (0); (i) < (k); ++(i)) {       int a, b;       string c;       cin >> a >> c >> b;       edge.push_back(make_pair(make_pair(a, b), c));       if (c ==  = ) {         Adj[a].push_back(make_pair(0, b));         Adj[b].push_back(make_pair(0, a));       } else if (c ==  > ) {         Adj[a].push_back(make_pair(1, b));         Adj[b].push_back(make_pair(2, a));       } else if (c ==  < ) {         Adj[a].push_back(make_pair(2, b));         Adj[b].push_back(make_pair(1, a));       } else if (c ==  <= ) {         Adj[a].push_back(make_pair(3, b));         Adj[b].push_back(make_pair(4, a));       } else if (c ==  >= ) {         Adj[a].push_back(make_pair(4, b));         Adj[b].push_back(make_pair(3, a));       }     }     dp[0][2 * n + 1] = 1LL;     priority_queue<pair<pair<int, int>, int>, vector<pair<pair<int, int>, int> >,                    greater<pair<pair<int, int>, int> > >         Q1;     Q1.push(make_pair(make_pair(0, 0), 2 * n + 1));     while (!Q1.empty()) {       pair<pair<int, int>, int> t1 = Q1.top();       Q1.pop();       int l = t1.first.second;       int r = t1.second;       int d = t1.first.first;       visited[l][r] = true;       int valueNext = (l + 2 * n + 1 - r) / 2;       if (l + 3 == r) {         if (check(l, r, l + 1, r - 1, l + 1, r - 1)) {           dp[l + 1][r - 1] = (dp[l + 1][r - 1] + dp[l][r]);         } else {         }         continue;       } else {         if (check(l, r, l + 2, r, l + 1, l + 2)) {           dp[l + 2][r] = (dp[l + 2][r] + dp[l][r]);           if (!visited[l + 2][r]) {             Q1.push(make_pair(make_pair(d + 1, l + 2), r));             visited[l + 2][r] = true;           }         } else {         }         if (check(l, r, l + 1, r - 1, l + 1, r - 1)) {           dp[l + 1][r - 1] = (dp[l + 1][r - 1] + dp[l][r]);           if (!visited[l + 1][r - 1]) {             Q1.push(make_pair(make_pair(d + 1, l + 1), r - 1));             visited[l + 1][r - 1] = true;           }         } else {         }         if (check(l, r, l, r - 2, r - 1, r - 2)) {           dp[l][r - 2] = (dp[l][r - 2] + dp[l][r]);           if (!visited[l][r - 2]) {             Q1.push(make_pair(make_pair(d + 1, l), r - 2));             visited[l][r - 2] = true;           }         } else {         }       }     }     long long answer1 = 0;     for (int(i) = (0); (i) < (2 * n + 1); ++(i)) {       answer1 = (answer1 + dp[i][i + 1]);     }     printf( %lld n , answer1);     return 0;   }