func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long mod = 1e9 + 7;   long double PI = acosl(-1);   const long long infl = 1e18;   const int nmax = 1e6 + 5;   const int MAXLG = log2(nmax) + 1;   const int N = 2e4 + 5;   struct Hopcroft_Karp {     int NIL = 0, INF = (1 << 28), match[N], dist[N], n, m;     vector<int> G[N];     void init(int lft, int rgt) {       n = lft, rgt = m;       for (int i = 0; i <= n + m + 1; i++) G[i].clear();     }     void addEdge(int u, int v) { G[u].push_back(v + n); }     bool bfs() {       queue<int> Q;       for (int i = 1; i <= n; i++) {         if (match[i] == NIL)           dist[i] = 0, Q.push(i);         else           dist[i] = INF;       }       dist[NIL] = INF;       while (!Q.empty()) {         int u = Q.front();         Q.pop();         if (u != NIL) {           for (int i = 0; i < G[u].size(); i++) {             int v = G[u][i];             if (dist[match[v]] == INF) {               dist[match[v]] = dist[u] + 1;               Q.push(match[v]);             }           }         }       }       return (dist[NIL] != INF);     }     bool dfs(int u) {       if (u != NIL) {         for (int i = 0; i < G[u].size(); i++) {           int v = G[u][i];           if (dist[match[v]] == dist[u] + 1) {             if (dfs(match[v])) {               match[v] = u;               match[u] = v;               return true;             }           }         }         dist[u] = INF;         return false;       }       return true;     }     int hopcroft_karp() {       memset(dist, 0, sizeof dist);       memset(match, 0, sizeof match);       int matching = 0;       while (bfs()) {         for (int i = 1; i <= n; i++) {           if (match[i] == NIL && dfs(i)) {             matching++;           }         }       }       return matching;     }   };   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     Hopcroft_Karp carp;     int n, m;     cin >> n >> m;     vector<pair<int, pair<int, int> > > ejes;     for (int i = 0; i < m; i++) {       int u, v, d;       cin >> u >> v >> d;       ejes.push_back({d, {u, v}});     }     carp.init(n, n);     for (pair<int, pair<int, int> > pp : ejes) {       carp.addEdge(pp.second.first, pp.second.second);     }     int z = carp.hopcroft_karp();     if (z != n) cout <<  -1 n , exit(0);     sort(ejes.begin(), ejes.end());     int lo = 1, hi = 1000000000;     while (hi > lo) {       int mid = (hi + lo) / 2;       carp.init(n, n);       for (auto pp : ejes) {         if (pp.first > mid) break;         carp.addEdge(pp.second.first, pp.second.second);       }       if (carp.hopcroft_karp() == n)         hi = mid;       else         lo = mid + 1;     }     cout << lo << endl;   }   