#include <bits/stdc++.h>
using namespace std;
#define int long long
#define lb double long
#define el '\n'
#define pb push_back
#define all(x) begin(x), end(x)
#define sz(s) (s.size())
#define oo LLONG_MAX
#define pp pair<int, int>
void setIO(string s) {
#ifndef ONLINE_JUDGE
freopen((s + ".in").c_str(), "r", stdin);
freopen((s + ".out").c_str(), "w", stdout);
#endif
}
const int MOD = (int) 1e9+7; //998244353;
const int MAX = 1e5 + 5;
int n, r;
vector<tuple<int,int,int>> a;
void Solve(){
cin >> n >> r;
for (int i = 1, type; i <= r; i++) {
char x, y;
cin >> type >> x >> y;
a.pb({type, x, y});
}
string s = "";
for (int i = 'A'; i <= 'J'; i++) {
if (sz(s) == n) break;
s += (char)i;
}
int res = 0;
sort(all(s));
do {
bool ok = 1;
int pos[256];
for (int i = 1; i <= n; i++) pos[s[i]] = i;
for (auto &[type, x, y] : a) {
if (type == 1 && pos[x] >= pos[y]) { ok = 0; break; }
if (type == 2 && pos[x] <= pos[y]) { ok = 0; break; }
if (type == 3 && abs(pos[x] - pos[y]) == 1) { ok = 0; break; }
}
res += ok;
} while (next_permutation(all(s)));
cout << res << el;
}
signed main (){
ios_base::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int T(1);
// cin >> T;
while(T--) Solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGxiIGRvdWJsZSBsb25nCiNkZWZpbmUgZWwgJ1xuJwojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGFsbCh4KSBiZWdpbih4KSwgZW5kKHgpCiNkZWZpbmUgc3oocykgKHMuc2l6ZSgpKQojZGVmaW5lIG9vIExMT05HX01BWAojZGVmaW5lIHBwIHBhaXI8aW50LCBpbnQ+Cgp2b2lkIHNldElPKHN0cmluZyBzKSB7CiAgICAjaWZuZGVmIE9OTElORV9KVURHRQogICAgICAgIGZyZW9wZW4oKHMgKyAiLmluIikuY19zdHIoKSwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbigocyArICIub3V0IikuY19zdHIoKSwgInciLCBzdGRvdXQpOwogICAgI2VuZGlmCn0KCmNvbnN0IGludCBNT0QgPSAoaW50KSAxZTkrNzsgLy85OTgyNDQzNTM7CmNvbnN0IGludCBNQVggPSAxZTUgKyA1OwoKaW50IG4sIHI7CnZlY3Rvcjx0dXBsZTxpbnQsaW50LGludD4+IGE7Cgp2b2lkIFNvbHZlKCl7CmNpbiA+PiBuID4+IHI7CmZvciAoaW50IGkgPSAxLCB0eXBlOyBpIDw9IHI7IGkrKykgewogICBjaGFyIHgsIHk7CiAgIGNpbiA+PiB0eXBlID4+IHggPj4geTsKICAgYS5wYih7dHlwZSwgeCwgeX0pOwp9CgpzdHJpbmcgcyA9ICIiOwpmb3IgKGludCBpID0gJ0EnOyBpIDw9ICdKJzsgaSsrKSB7CiAgIGlmIChzeihzKSA9PSBuKSBicmVhazsKICAgcyArPSAoY2hhcilpOwp9CgppbnQgcmVzID0gMDsKc29ydChhbGwocykpOwpkbyB7CiAgIGJvb2wgb2sgPSAxOwogICBpbnQgcG9zWzI1Nl07CiAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgcG9zW3NbaV1dID0gaTsKICAgZm9yIChhdXRvICZbdHlwZSwgeCwgeV0gOiBhKSB7CiAgICAgICBpZiAodHlwZSA9PSAxICYmIHBvc1t4XSA+PSBwb3NbeV0pIHsgb2sgPSAwOyBicmVhazsgfQogICAgICAgaWYgKHR5cGUgPT0gMiAmJiBwb3NbeF0gPD0gcG9zW3ldKSB7IG9rID0gMDsgYnJlYWs7IH0KICAgICAgIGlmICh0eXBlID09IDMgJiYgYWJzKHBvc1t4XSAtIHBvc1t5XSkgPT0gMSkgeyBvayA9IDA7IGJyZWFrOyB9CiAgIH0KICAgcmVzICs9IG9rOwp9IHdoaWxlIChuZXh0X3Blcm11dGF0aW9uKGFsbChzKSkpOwoKY291dCA8PCByZXMgPDwgZWw7Cn0KCnNpZ25lZCBtYWluICgpewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKDApLCBjb3V0LnRpZSgwKTsKCiAgICBpbnQgVCgxKTsKICAgIC8vIGNpbiA+PiBUOwogICAgd2hpbGUoVC0tKSBTb2x2ZSgpOwoKICAgIHJldHVybiAwOwp9Cg==