fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef vector<bool> vb;
  5. typedef vector<vb> vvb;
  6. typedef vector<int> vi;
  7. typedef vector<vi> vvi;
  8. typedef vector<ll> vl;
  9. typedef vector<vl> vvl;
  10. typedef vector<char> vc;
  11. typedef vector<vc> vvc ;
  12. typedef vector<string> vs;
  13. typedef vector<pair<ll, ll> > vp;
  14. typedef pair<ll, ll> pl;
  15.  
  16. #define endl "\n"
  17. #define pb push_back
  18. #define F first
  19. #define S second
  20. #define all(v) v.begin(), v.end()
  21. #define rall(v) v.rbegin(), v.rend()
  22. #define sz(a) int(a.size())
  23. const ll mod = 1e9+7;
  24.  
  25. vl mp(300, 0);
  26.  
  27. void solve(){
  28. ll n, c;
  29. string v;
  30. vs pem;
  31.  
  32. vector<pair<ll, pair<char, char>>> r;
  33.  
  34. cin >> n >> c;
  35. for(ll i=0; i<n; i++){
  36. v+=('A'+i);
  37. }
  38.  
  39. for(ll i=0; i<c; i++){
  40. ll a;
  41. char t1, t2;
  42. cin >> a >> t1 >> t2;
  43. r.pb({a, {t1, t2}});
  44. }
  45.  
  46.  
  47. ll res=0;
  48. do {
  49.  
  50. for(ll i=0; i<n; i++)
  51. mp[v[i]]=i;
  52.  
  53. bool pos=1;
  54.  
  55. for(auto rs: r){
  56. ll a = rs.F;
  57. char t1 = rs.S.F;
  58. char t2 = rs.S.S;
  59.  
  60. if(a==1 && mp[t1] > mp[t2]){
  61. pos=0;
  62.  
  63. } else if(a==2 && mp[t1] < mp[t2]){
  64. pos=0;
  65.  
  66. } else if(a==3 && (mp[t1]+1 == mp[t2] || mp[t2]+1==mp[t1])){
  67. pos=0;
  68. }
  69. }
  70.  
  71. res+=pos;
  72.  
  73. } while(next_permutation(all(v)));
  74.  
  75. cout << res << endl;
  76.  
  77.  
  78.  
  79.  
  80. }
  81.  
  82. int main(){
  83. ios::sync_with_stdio(false);
  84. cin.tie(nullptr);
  85.  
  86. int tt=1;
  87.  
  88. // cin >> tt;
  89.  
  90. while(tt--){
  91. solve();
  92. }
  93. }
Success #stdin #stdout 0.1s 5308KB
stdin
10 10
1 A B
1 A B
1 A B
1 A B
1 A B
1 A B
1 A B
1 A B
1 A B
1 A B
stdout
1814400