from collections import deque from random import randint INF = 10**18 N, M = [int(s) for s in input().split()] graph = [[] for _ in range(N)] for _ in range(M): u, v = [int(s) - 1 for s in input().split()] graph[u].append(v) graph[v].append(u) del_graph = [set(graph[v]) for v in range(N)] three = [v for v in range(N) if len(graph[v]) == 3] order = [] connected = [] while three: curr = three.pop() order.append(curr) to_vs = del_graph[curr].copy() connected.append(to_vs) for to in to_vs: del_graph[to].discard(curr) if len(del_graph[to]) == 3: three.append(to) order = order[::-1] connected = connected[::-1] answers = [None] * N answers[order[0]] = 1 answers[order[1]] = 2 answers[order[2]] = 3 for curr, vs in zip(order[3:], connected[3:]): answers[curr] = ({1, 2, 3, 4} - {answers[v] for v in vs}).pop() print(*answers)