(n, m), visited, queue, next_queue = map(int, input().split()), {1}, [], [1]
edges, down, up = [[] for _ in range(n + 1)], [[] for _ in range(n + 1)], [-1] * (n + 1)

for x, y in (map(int, input().split()) for _ in range(m)): edges[x].append(y), edges[y].append(x)

# Create a spanning tree in `down` and `up`
while next_queue:
    queue, next_queue = next_queue, []
    for a in queue:
        for b in edges[a]:
            if b not in visited:
                down[a].append(b)
                up[b] = a
                visited.add(b)
                next_queue.append(b)

visited, curr, dist, res = {1}, 1, 0, [1]
while len(res) < n:
    if curr not in visited and (dist == 3 or not down[curr]):
        res.append(curr)
        visited.add(curr)
        dist = 0
    curr = down[curr].pop() if down[curr] else up[curr]
    dist += 1

print(*res)
