func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long inf(101010101010101010LL);   int n;   struct uf {     int par[1005];     uf() {       for (int i(0); i < (n); i++) par[i] = i;     }     int ff(int x) { return par[x] == x ? x : par[x] = ff(par[x]); }     void uu(int x, int y) {       x = ff(x), y = ff(y);       if (x - y) par[x] = y;     }   };   vector<pair<int, int> > edges;   vector<int> eA, eB;   char col[20];   int main() {     cin >> n;     int m;     cin >> m;     edges.resize(m);     uf fA, fB;     for (int id(0); id < (m); id++) {       int x, y;       scanf( %d%d%s , &x, &y, col);       x--, y--;       edges[id] = make_pair(x, y);       if (col[0] ==  S ) {         if (fA.ff(x) == fA.ff(y)) continue;         eA.push_back(id), fA.uu(x, y);       } else {         if (fB.ff(x) == fB.ff(y)) continue;         eB.push_back(id), fB.uu(x, y);       }     }     uf fAB_1;     for (__typeof((eA).end()) it((eA).begin()); it != (eA).end(); ++it) {       int id(*it), x(edges[id].first), y(edges[id].second);       fAB_1.uu(x, y);     }     vector<int> eB_selected;     for (__typeof((eB).end()) it((eB).begin()); it != (eB).end(); ++it) {       int id(*it), x(edges[id].first), y(edges[id].second);       if (fAB_1.ff(x) != fAB_1.ff(y)) {         eB_selected.push_back(id);         fAB_1.uu(x, y);       }     }     uf fAB_2;     int nA(0), nB(((int)(eB_selected).size()));     for (__typeof((eB_selected).end()) it((eB_selected).begin());          it != (eB_selected).end(); ++it) {       int id(*it), x(edges[id].first), y(edges[id].second);       fAB_2.uu(x, y);     }     for (__typeof((eB).end()) it((eB).begin()); it != (eB).end(); ++it)       if (nB < (n - 1) / 2) {         int id(*it), x(edges[id].first), y(edges[id].second);         if (fAB_2.ff(x) != fAB_2.ff(y)) {           eB_selected.push_back(id);           fAB_2.uu(x, y);           nB++;         }       }     vector<int> eA_selected;     for (__typeof((eA).end()) it((eA).begin()); it != (eA).end(); ++it) {       int id(*it), x(edges[id].first), y(edges[id].second);       if (fAB_2.ff(x) != fAB_2.ff(y)) {         eA_selected.push_back(id);         fAB_2.uu(x, y);         nA++;       }     }     if (nA != (n - 1) / 2 || nB != (n - 1) / 2) {       puts( -1 );       return 0;     }     cout << (n - 1) << endl;     vector<int> selected;     for (__typeof((eA_selected).end()) it((eA_selected).begin());          it != (eA_selected).end(); ++it)       selected.push_back(*it);     for (__typeof((eB_selected).end()) it((eB_selected).begin());          it != (eB_selected).end(); ++it)       selected.push_back(*it);     for (__typeof((selected).end()) it((selected).begin());          it != (selected).end(); ++it) {       if (it != (selected).begin()) cout <<    ;       cout << (*it) + 1;     }     cout << endl;   }   