#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<bool> vb;
typedef vector<vb> vvb;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef vector<char> vc;
typedef vector<vc> vvc ;
typedef vector<string> vs;
typedef vector<pair<ll, ll> > vp;
typedef pair<ll, ll> pl;
#define endl "\n"
#define pb push_back
#define F first
#define S second
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
#define sz(a) int(a.size())
const ll mod = 1e9+7;
vl mp(300, 0);
void solve(){
ll n, c;
string v;
vs pem;
vector<pair<ll, pair<char, char>>> r;
cin >> n >> c;
for(ll i=0; i<n; i++){
v+=('A'+i);
}
for(ll i=0; i<c; i++){
ll a;
char t1, t2;
cin >> a >> t1 >> t2;
r.pb({a, {t1, t2}});
}
ll res=0;
do {
for(ll i=0; i<n; i++)
mp[v[i]]=i;
bool pos=1;
for(auto rs: r){
ll a = rs.F;
char t1 = rs.S.F;
char t2 = rs.S.S;
if(a==1 && mp[t1] > mp[t2]){
pos=0;
} else if(a==2 && mp[t1] < mp[t2]){
pos=0;
} else if(a==3 && (mp[t1]+1 == mp[t2] || mp[t2]+1==mp[t1])){
pos=0;
}
}
res+=pos;
} while(next_permutation(all(v)));
cout << res << endl;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int tt=1;
// cin >> tt;
while(tt--){
solve();
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgdmVjdG9yPGJvb2w+IHZiOwp0eXBlZGVmIHZlY3Rvcjx2Yj4gdnZiOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIHZlY3Rvcjx2aT4gdnZpOwp0eXBlZGVmIHZlY3RvcjxsbD4gdmw7CnR5cGVkZWYgdmVjdG9yPHZsPiB2dmw7CnR5cGVkZWYgdmVjdG9yPGNoYXI+IHZjOwp0eXBlZGVmIHZlY3Rvcjx2Yz4gdnZjIDsKdHlwZWRlZiB2ZWN0b3I8c3RyaW5nPiB2czsKdHlwZWRlZiB2ZWN0b3I8cGFpcjxsbCwgbGw+ID4gdnA7CnR5cGVkZWYgcGFpcjxsbCwgbGw+IHBsOwogCiNkZWZpbmUgZW5kbCAiXG4iCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgRiBmaXJzdAojZGVmaW5lIFMgc2Vjb25kCiNkZWZpbmUgYWxsKHYpIHYuYmVnaW4oKSwgdi5lbmQoKQojZGVmaW5lIHJhbGwodikgdi5yYmVnaW4oKSwgdi5yZW5kKCkKI2RlZmluZSBzeihhKSBpbnQoYS5zaXplKCkpCmNvbnN0IGxsIG1vZCA9IDFlOSs3OwoKdmwgbXAoMzAwLCAwKTsKCnZvaWQgc29sdmUoKXsKCWxsIG4sIGM7CglzdHJpbmcgdjsKCXZzIHBlbTsKCQoJdmVjdG9yPHBhaXI8bGwsIHBhaXI8Y2hhciwgY2hhcj4+PiByOwoJCgljaW4gPj4gbiA+PiBjOwoJZm9yKGxsIGk9MDsgaTxuOyBpKyspewoJCXYrPSgnQScraSk7Cgl9CgkKCWZvcihsbCBpPTA7IGk8YzsgaSsrKXsKCQlsbCBhOwoJCWNoYXIgdDEsIHQyOwoJCWNpbiA+PiBhID4+IHQxID4+IHQyOwoJCXIucGIoe2EsIHt0MSwgdDJ9fSk7Cgl9CgkKCQoJbGwgcmVzPTA7CglkbyB7CgkJCgkJZm9yKGxsIGk9MDsgaTxuOyBpKyspCgkJCW1wW3ZbaV1dPWk7CgkJCQoJCWJvb2wgcG9zPTE7CgkJCgkJZm9yKGF1dG8gcnM6IHIpewoJCQlsbCBhID0gcnMuRjsKCQkJY2hhciB0MSA9IHJzLlMuRjsKCQkJY2hhciB0MiA9IHJzLlMuUzsKCQkJCgkJCWlmKGE9PTEgJiYgbXBbdDFdID4gbXBbdDJdKXsKCQkJCXBvcz0wOwoJCQkJCgkJCX0gZWxzZSBpZihhPT0yICYmIG1wW3QxXSA8IG1wW3QyXSl7CgkJCQlwb3M9MDsKCQkJCQoJCQl9IGVsc2UgaWYoYT09MyAmJiAobXBbdDFdKzEgPT0gbXBbdDJdIHx8IG1wW3QyXSsxPT1tcFt0MV0pKXsKCQkJCXBvcz0wOwoJCQl9CgkJfQoJCQoJCXJlcys9cG9zOwkKCQkKCX0gd2hpbGUobmV4dF9wZXJtdXRhdGlvbihhbGwodikpKTsKCQoJY291dCA8PCByZXMgPDwgZW5kbDsKCQoJCgkKCQp9CgppbnQgbWFpbigpewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKICAgIAogICAgaW50IHR0PTE7IAoKICAgIC8vIGNpbiA+PiB0dDsKCiAgICB3aGlsZSh0dC0tKXsKICAgICAgICBzb2x2ZSgpOwogICAgfQp9