712 {
713 int n, m;
714 int ans = 0;
715 unordered_set<int> mst;
717 priority_queue<tuple<int, int, int>, vector<tuple<int, int, int>>,
tuple_compare> pq;
718 cin >> n >> m;
719 while(m--) {
720 int u, v, w;
721 cin >> u >> v >> w;
722 if(g.find(u) == g.end()) {
724 }
725 g[u].insert(make_pair(v, w));
726 if(g.find(v) == g.end()) {
727 g[v] = unordered_set<pair<int, int>, pair_hash, pair_equal>();
728 }
729 g[v].insert(make_pair(u, w));
730 }
731 mst.insert(g.begin()->first);
732 for(const auto &p: g[g.begin()->first]) {
733 pq.push(make_tuple(g.begin()->first, p.first, p.second));
734 }
735 while(!pq.empty()) {
736 auto [u, v, w] = pq.top();
737 pq.pop();
738 bool u_in = mst.find(u) != mst.end();
739 bool v_in = mst.find(v) != mst.end();
740 if(u_in && v_in)
741 continue;
742 int to_insert = u_in ? v : u;
743 mst.insert(to_insert);
745 for(const auto &p: g[to_insert]) {
746 if(mst.find(p.first) != mst.end() && mst.find(to_insert) != mst.end())
747 continue;
748 pq.push(make_tuple(to_insert, p.first, p.second));
749 }
750 }
751 if(mst.size() == n) {
753 } else {
754 cout << "impossible";
755 }
756 return 0;
757 }
vector< vector< int > > ans