func_code_string: #include <bits/stdc++.h>   #pragma GCC optimize(2)   using namespace std;   inline long long read() {     char c = getchar();     long long x = 0;     bool f = 0;     for (; !isdigit(c); c = getchar()) f ^= !(c ^ 45);     for (; isdigit(c); c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);     if (f) x = -x;     return x;   }   long long res, n, m, k;   vector<pair<long long, long long> > e[200005];   vector<long long> v[13];   const long long b1 = 19491001;   unsigned long long pw[200005], sumn, sum[13][13], qwq;   void dfs(long long u) {     if (u == k + 1) {       res += (qwq == sumn);       return;     }     for (register long long i = (0); i <= (u - 1); ++i) {       qwq += sum[u][i];       dfs(u + 1);       qwq -= sum[u][i];     }   }   signed main() {     n = read(), m = read(), k = read();     pw[0] = 1;     for (register long long i = (1); i <= (n); ++i)       pw[i] = pw[i - 1] * b1, sumn += pw[i];     for (register long long i = (1); i <= (m); ++i) {       long long u = read(), v = read(), w = read();       e[u].push_back(make_pair(w, v));     }     for (register long long i = (1); i <= (n); ++i)       sort(e[i].begin(), e[i].end()), v[e[i].size()].push_back(i);     for (register long long i = (1); i <= (k); ++i)       for (register long long j = (0); j <= (i - 1); ++j) {         unsigned long long now = 0;         for (long long p = 0; p < v[i].size(); ++p)           now += pw[e[v[i][p]][j].second];         sum[i][j] = now;       }     dfs(1);     cout << res;     return 0;   }   