package main
import (
"container/heap"
"fmt"
)
type MinHeap []int
func (h MinHeap) Len() int { return len(h) }
func (h MinHeap) Less(i, j int) bool { return h[i] < h[j] }
func (h MinHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
func (h *MinHeap) Push(x interface{}) {
*h = append(*h, x.(int))
}
func (h *MinHeap) Pop() interface{} {
old := *h
n := len(old)
x := old[n-1]
*h = old[0 : n-1]
return x
}
func main() {
var n, m int
fmt.Scan(&n, &m)
adj := make([][]int, n+1)
for i := 0; i < m; i++ {
var u, v int
fmt.Scan(&u, &v)
adj[u] = append(adj[u], v)
adj[v] = append(adj[v], u)
}
visited := make([]bool, n+1)
sequence := []int{1}
visited[1] = true
var hp MinHeap
heap.Init(&hp)
for _, nei := range adj[1] {
if !visited[nei] {
heap.Push(&hp, nei)
}
}
for len(sequence) < n {
if len(hp) == 0 {
break
}
u := heap.Pop(&hp).(int)
if visited[u] {
continue
}
sequence = append(sequence, u)
visited[u] = true
for _, v := range adj[u] {
if !visited[v] {
heap.Push(&hp, v)
}
}
}
for i, node := range sequence {
if i > 0 {
fmt.Print(" ")
}
fmt.Print(node)
}
fmt.Println()
}