func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long INF = 9223372036854775807ll;   const int inf = 2147483647, nmax = 1000006;   struct thing {     long long a, b, c, i;     bool operator<(const thing &obj) const { return c < obj.c; }   } e[nmax], e2[nmax], apm[nmax];   struct thing2 {     long long a, b, c, i, st, dr, mid, ans;     bool operator<(const thing2 &obj) const { return mid < obj.mid; }   };   long long n, m, c[nmax], rng[nmax], v[nmax], ans[nmax];   vector<thing2> r;   long long find(long long x) {     if (x == c[x]) return x;     return c[x] = find(c[x]);   }   void unite(long long x, long long y) {     if (x == y) return;     if (rng[x] > rng[y])       c[y] = x;     else       c[x] = y;     if (rng[x] == rng[y]) ++rng[y];   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cout.tie(NULL);     cin >> n >> m;     for (int i = 1; i <= m; ++i) {       cin >> e[i].a >> e[i].b >> e[i].c;       e[i].i = i;       e2[i] = e[i];       ans[i] = -1;     }     sort(e2 + 1, e2 + m + 1);     for (int i = 1; i <= n; ++i) rng[i] = 1, c[i] = i;     int p = 0;     for (int i = 1; i <= m; ++i)       if (find(e2[i].a) != find(e2[i].b)) {         apm[++p] = e2[i];         unite(find(e2[i].a), find(e2[i].b));         v[p] = e2[i].c;       } else {         thing2 obj;         obj.a = e2[i].a;         obj.b = e2[i].b;         obj.c = e2[i].c;         obj.i = e2[i].i;         obj.st = 1;         obj.dr = n - 1;         r.push_back(obj);       }     sort(v + 1, v + n);     for (int t = 1; t <= 32; ++t) {       for (auto &x : r) x.mid = (x.st + x.dr) / 2;       sort(r.begin(), r.end());       for (int i = 1; i <= n; ++i) rng[i] = 1, c[i] = i;       unsigned p = 0;       for (int i = 1; i < n; ++i) {         unite(find(apm[i].a), find(apm[i].b));         while (p < r.size() && v[r[p].mid] <= apm[i].c) {           if (find(r[p].a) == find(r[p].b)) {             r[p].dr = r[p].mid - 1;             r[p].ans = v[r[p].mid];           } else             r[p].st = r[p].mid + 1;           ++p;         }       }     }     for (auto x : r) ans[x.i] = x.ans;     for (int i = 1; i <= m; ++i)       if (ans[i] != -1) cout << ans[i] <<   n ;     return 0;   }   