func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 2e5 + 10;   const int MOD = 998244353;   struct node {     long long a, b;     node() {}     node(long long a, long long b) {       this->a = a;       this->b = b;     }     node operator+(const node& rhs) const {       return node((a + rhs.a) % MOD, (b + rhs.b) % MOD);     }     node operator*(const node& rhs) const {       return node(a * rhs.a % MOD, b * rhs.b % MOD);     }     bool operator==(const node& rhs) const { return a == rhs.a && b == rhs.b; }   };   node BASE(2333, 233333);   node h[maxn];   node ALL(0, 0);   node s[maxn][15];   vector<pair<int, int> > vec[maxn];   int n, m, k, ans;   void dfs(int u, node hh) {     if (u > k) {       ans += (hh == ALL ? 1 : 0);       return;     }     for (int i = 0; i < u; i++) {       node v = hh + s[u][i];       dfs(u + 1, v);     }     return;   }   int main() {     scanf( %d%d%d , &n, &m, &k);     h[0] = node(1, 1);     for (int i = 1; i <= n; i++) {       h[i] = h[i - 1] * BASE;       ALL = ALL + h[i];     }     for (int i = 1; i <= m; i++) {       int u, v, w;       scanf( %d%d%d , &u, &v, &w);       vec[u].emplace_back(make_pair(v, w));     }     for (int i = 1; i <= n; i++) {       sort(vec[i].begin(), vec[i].end(), [](pair<int, int> a, pair<int, int> b) {         return a.second < b.second;       });       int lens = vec[i].size();       for (int j = 0; j < lens; j++) s[lens][j] = s[lens][j] + h[vec[i][j].first];     }     dfs(1, node(0, 0));     printf( %d n , ans);     return 0;   }   