#include using namespace std; #define rep(i,a,b) for(int i=(a);i<(b);i++) #define all(a) begin(a),end(a) #define sz(a) (int)(a).size() typedef long long ll; typedef vector vi; typedef pair pii; const ll mod=998244353; struct dsu{ vectornec; dsu(int N):nec(N,-1){} int leader(int v){while(nec[v]>=0)v=nec[v];return v;} int size(int v){return -nec[leader(v)];} int merge(int u,int v){ u=leader(u); v=leader(v); if(u==v)return u; if(nec[u]V; for(auto a:A)V.insert(a); for(auto b:B)V.insert(b); for(auto c:C)V.insert(c); vector>E(1000); vector>F(1000); int M=sz(A); rep(i,0,M){ E[A[i]].emplace_back(B[i]); E[A[i]].emplace_back(C[i]); E[B[i]].emplace_back(C[i]); E[B[i]].emplace_back(A[i]); E[C[i]].emplace_back(A[i]); E[C[i]].emplace_back(B[i]); F[A[i]].emplace_back(pii(B[i],C[i])); F[B[i]].emplace_back(pii(A[i],C[i])); F[C[i]].emplace_back(pii(A[i],B[i])); } vi rev(1000); for(auto v:V){ vi U; for(auto u:E[v])U.emplace_back(u); sort(all(U)); U.erase(unique(all(U)),U.end()); rep(i,0,sz(U))rev[U[i]]=i; dsu DSU(sz(U)); for(auto[a,b]:F[v])DSU.merge(rev[a],rev[b]); if(DSU.size(0)!=sz(U))return false; } return true; } int main(){ cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); int N,M;cin>>N>>M; vector_A(M),_B(M),_C(M); rep(i,0,M)cin>>_A[i]>>_B[i]>>_C[i]; vector_E; rep(i,0,M){ rep(_,0,3){ _E.emplace_back(pii(min(_A[i],_B[i]),max(_A[i],_B[i]))); swap(_A[i],_B[i]);swap(_B[i],_C[i]); } } sort(all(_E)); _E.erase(unique(all(_E)),_E.end()); dsu D(N); setV; setE; vectorA,B,C; vector,int>>base1,base2; rep(_,0,M){ int a=_A[_],b=_B[_],c=_C[_]; A.emplace_back(a); B.emplace_back(b); C.emplace_back(c); D.merge(a,b); D.merge(a,c); V.insert(a); V.insert(b); V.insert(c); rep(_,0,3){ if(!E.count(pii(min(a,b),max(a,b)))){ E.insert(pii(min(a,b),max(a,b))); bitset<3000>Q; Q[a]=Q[b]=1; for(auto[b,c]:base1)if(Q[c])Q=Q^b; if(Q.any()){ int a=0; while(!Q[a])a++; base1.emplace_back(make_pair(Q,a)); } } swap(a,b); swap(b,c); } { bitset<3000>Q; Q[lower_bound(all(_E),pii(a,b))-_E.begin()]=1; Q[lower_bound(all(_E),pii(b,c))-_E.begin()]=1; Q[lower_bound(all(_E),pii(a,c))-_E.begin()]=1; for(auto[b,c]:base2)if(Q[c])Q=Q^b; if(Q.any()){ int a=0; while(!Q[a])a++; base2.emplace_back(make_pair(Q,a)); } swap(a,b); swap(b,c); } if(D.size(a)!=sz(V)){cout<<"CO"<