func_code_string: #include <bits/stdc++.h>   using namespace std;   const int mod = 1000000007;   const vector<int> mods = {998244353, 1000000007, 1000000009};   const long long inf = 3e18;   const double pi = acos(-1.0);   const double eps = 0.0000001;   mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());   template <class... K>   using umap = unordered_map<K...>;   template <class... K>   using uset = unordered_set<K...>;   int n, m, k;   int u, v, w;   const int N = 200100;   const int P = 400000;   umap<int, vector<pair<int, int> > > g;   long long pw[N][3];   long long fc[10][10][3];   vector<long long> goal;   long long comb[15];   long long res;   void build() {     for (int j = (0); j < (3); ++j) pw[0][j] = 1;     for (int i = (1); i < (n + 10); ++i)       for (int j = (0); j < (3); ++j) {         pw[i][j] = (pw[i - 1][j] * 13) % mods[j];       }     goal.resize(3);     for (int i = (0); i < (n); ++i)       for (int j = (0); j < (3); ++j) {         goal[j] = (goal[j] + pw[i][j]) % mods[j];       }   }   void inc() {     long long car = 1;     for (int i = (1); i < (10); ++i) {       long long nxc = (comb[i] + car) / i;       comb[i] = (comb[i] + car) % i;       car = nxc;     }   }   bool alz() {     for (int i = (1); i < (k + 1); ++i) {       if (comb[i]) return 0;     }     return 1;   }   int main() {     cin.sync_with_stdio(0);     cin.tie(0);     cout.precision(13);     cin >> n >> m >> k;     build();     for (int i = (0); i < (m); ++i) {       cin >> u >> v >> w;       u--;       v--;       g[u].push_back({w, v});     }     for (int i = (0); i < (n); ++i) sort(begin(g[i]), end(g[i]));     for (int i = (0); i < (n); ++i) {       long long sg = ((int)(g[i]).size());       for (int j = (0); j < (sg); ++j)         for (int k = (0); k < (3); ++k) {           fc[sg][j][k] = (fc[sg][j][k] + pw[g[i][j].second][k]) % mods[k];         }     }     res = 0;     for (int i = (0); i < (P); ++i) {       vector<long long> cur(3);       for (int i = (0); i < (k); ++i)         for (int j = (0); j < (3); ++j) {           cur[j] = (cur[j] + fc[i + 1][comb[i + 1]][j]) % mods[j];         }       if (cur == goal) res++;       inc();       if (alz()) break;     }     cout << res <<   n ;     return 0;   }   