from collections import deque N,M=map(int,input().split()) l = [{0,1,2,3} for _ in range(N)] edge = [[] for _ in range(N)] for _ in range(M): u,v = map(int,input().split()) edge[u-1].append(v-1) edge[v-1].append(u-1) # 順番がわかれば構成めっちゃ簡単なんだけどなああああああ pos = 0 ans = [-1]*N dq = deque() dq.append(pos) use = [False]*N use[0] = True while dq: p = dq.popleft() if len(l[pos]) == 0: assert 0==1 ans[p] = list(l[p])[0] for e in edge[p]: if ans[p] in l[e]: l[e].remove(ans[p]) if not use[e]: use[e] = True dq.append(e) print("Yes") print(*[ai+1 for ai in ans])