from sys import stdin input = stdin.readline from collections import deque N, M = map(int, input().split()) G = [[] for _ in range(N)] GS = [set() for _ in range(N)] for _ in range(M): u, v = map(int, input().split()) u, v = u-1, v-1 G[u].append(v) G[v].append(u) GS[u].add(v) GS[v].add(u) visited = [False]*N que = deque() parent = [[] for _ in range(N)] for i in range(N): if not visited[i] and len(GS[i]) <= 3: visited[i] = True que.append(i) parent[i] = list(GS[i]) order = [] while que: n = que.popleft() order.append(n) for v in G[n]: GS[v].remove(n) if not visited[v] and len(GS[v]) <= 3: visited[v] = True que.append(v) parent[v] = list(GS[v]) order = order[::-1] ans = [-1]*N for i in range(3): ans[order[i]] = i for i in range(3, N): S = set(range(4)) for v in parent[order[i]]: S.remove(ans[v]) ans[order[i]] = S.pop() print("Yes") print(*[a+1 for a in ans])