R=range class UnionFindForest: def __init__(__self__,N): __self__.c=__self__.N=N __self__.P=list(R(N)) __self__.H=[0]*N def RootOfNode(__self__,i): m=__self__.P[i] while i!=m:__self__.P[i]=__self__.P[m];i=__self__.P[i];m=__self__.P[i] return i def Graft(__self__,u,v): u,v=__self__.RootOfNode(u),__self__.RootOfNode(v) if __self__.H[v]<__self__.H[u]:u,v=v,u __self__.H[v]+=__self__.H[u]==__self__.H[v];__self__.P[u]=v;__self__.c-=u!=v def NodeSize(__self__):return __self__.N def RootSize(__self__):return __self__.c J=lambda:map(int,input().split()) N,M=J() appeared=[0]*N vertex=0 t_f10=[] rank10=0 row10=[-1]*N f21=[0]*M rank21=0 row21=[-1]*M*3 uff_total=UnionFindForest(N) uff_each=[UnionFindForest(N)for i in R(N)] edge_num=[[-1]*N for i in R(N)] e=[[]for i in R(N)] for m in R(M): ABC=[x-1 for x in J()] for i in ABC: if not appeared[i]: appeared[i]=1 vertex+=1 for r in R(3): A,B=ABC[1 if r==1 else 0],ABC[1 if r==0 else 2] if edge_num[A][B]==-1: num=edge_num[A][B]=len(t_f10) e[A]+=[B] e[B]+=[A] t_f10+=[(1<>j&1: if row10[j]==-1: rank10+=1 row10[j]=num break else:t_f10[num]^=t_f10[row10[j]] uff_total.Graft(A,B) for i in R(N): if i!=A and i!=B:uff_each[i].Graft(A,B) f21[m]|=1<>j&1: if row21[j]==-1: rank21+=1 row21[j]=m break else:f21[m]^=f21[row21[j]] if uff_total.RootSize()-(N-vertex)!=1:print("CO") elif len(t_f10)-rank10>rank21:print("H1") else: LK=1 for i in R(N): if appeared[i]: root=uff_each[i].RootOfNode(e[i][0]) for j in R(1,len(e[i])):LK&=uff_each[i].RootOfNode(e[i][j])==root print("LCKM"[LK::2])