#include using namespace std; typedef long long ll; typedef pair ii; typedef pair iii; const int N = 3e5+100; struct graph { int n; vector adj[N]; graph(int n) : n(n){ fill(adj, adj+n, vector()); } void add_edge(int u, int v) { adj[u].push_back(v); adj[v].push_back(u); } vector& operator[](int u) { return adj[u]; } }; vector> biconnected_components(graph &adj) { int n = adj.n; vector num(n), low(n), art(n), stk; vector> comps; function dfs = [&](int u, int p, int &t) { num[u] = low[u] = ++t; stk.push_back(u); for (int v : adj[u]) if (v != p) { if (!num[v]) { dfs(v, u, t); low[u] = min(low[u], low[v]); if (low[v] >= num[u]) { art[u] = (num[u] > 1 || num[v] > 2); comps.push_back({u}); while (comps.back().back() != v) comps.back().push_back(stk.back()), stk.pop_back(); } } else low[u] = min(low[u], num[v]); } }; for (int u = 0, t; u < n; ++u) if (!num[u]) dfs(u, -1, t = 0); return comps; } iii e[N]; int cnt[N]; bool mark[2][N]; set c[N]; int get_cmn(set &f, set &s){ if(f.size() > s.size()) f.swap(s); for(auto v : f) if(s.count(v)) return v; return -1; } signed main(){ ios_base::sync_with_stdio(false);cin.tie(NULL); int n, m;cin >> n >> m; graph g = graph(n); for(int i=0 ; i> v >> u >> w;v --;u --; e[i] = iii(ii(v, u), w); g.add_edge(v, u); } auto cmps = biconnected_components(g); int sz=0; for(auto cmp : cmps){ for(auto i : cmp){ c[i].insert(sz); cnt[sz] ++; } sz ++; } int all = 0; for(int i=0 ; i -1){ mark[w][ cmn ] = true; }else all ^= w; } for(int i=0 ; i