#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; // sửa lỗi sai khai báo
int check (string s) {
unordered_map<char,int> pos;
for (int i = 0; i < n; ++i)
pos[s[i]] = i;
for (auto &[type, x, y] : a) {
if (type == 1 && pos[x] >= pos[y]) return 0;
if (type == 2 && pos[x] <= pos[y]) return 0;
if (type == 3 && abs(pos[x] - pos[y]) == 1) return 0;
}
return 1;
}
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;
do {
if (check(s)) res++;
} 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+IGE7IC8vIHPhu61hIGzhu5dpIHNhaSBraGFpIGLDoW8KCmludCBjaGVjayAoc3RyaW5nIHMpIHsKdW5vcmRlcmVkX21hcDxjaGFyLGludD4gcG9zOwpmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkKICAgcG9zW3NbaV1dID0gaTsKZm9yIChhdXRvICZbdHlwZSwgeCwgeV0gOiBhKSB7CiAgICAgICAgaWYgKHR5cGUgPT0gMSAmJiBwb3NbeF0gPj0gcG9zW3ldKSByZXR1cm4gMDsKICAgICAgICBpZiAodHlwZSA9PSAyICYmIHBvc1t4XSA8PSBwb3NbeV0pIHJldHVybiAwOwogICAgICAgIGlmICh0eXBlID09IDMgJiYgYWJzKHBvc1t4XSAtIHBvc1t5XSkgPT0gMSkgcmV0dXJuIDA7CiAgICB9CnJldHVybiAxOwp9Cgp2b2lkIFNvbHZlKCl7CmNpbiA+PiBuID4+IHI7CmZvciAoaW50IGkgPSAxLCB0eXBlOyBpIDw9IHI7IGkrKykgewogICBjaGFyIHgsIHk7CiAgIGNpbiA+PiB0eXBlID4+IHggPj4geTsKICAgYS5wYih7dHlwZSwgeCwgeX0pOwp9CgpzdHJpbmcgcyA9ICIiOwpmb3IgKGludCBpID0gJ0EnOyBpIDw9ICdKJzsgaSsrKSB7CiAgIGlmIChzeihzKSA9PSBuKSBicmVhazsKICAgcyArPSAoY2hhcilpOwp9CgppbnQgcmVzID0gMDsKZG8gewogICBpZiAoY2hlY2socykpIHJlcysrOwp9IHdoaWxlIChuZXh0X3Blcm11dGF0aW9uKGFsbChzKSkpOyAgCgpjb3V0IDw8IHJlcyA8PCBlbDsKfQoKc2lnbmVkIG1haW4gKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoMCksIGNvdXQudGllKDApOwoKICAgIGludCBUKDEpOwogICAgLy8gY2luID4+IFQ7CiAgICB3aGlsZShULS0pIFNvbHZlKCk7CgogICAgcmV0dXJuIDA7Cn0=