// BFS는 큐를 사용하는것이 중요하다.!!
#include <iostream>
#include <vector>
using namespace std;
const int MAX = 100;
int n,m;
vector <int> myGraph[MAX];
void BFS(){
// 큐에다가 넣고 인접한 것을 찾는 과정이라서 재귀가 필요없다
queue<int> Queue;
// Queue.push(x);
// x를 큐에 삽입
// Queue.pop();
// 큐의 맨 앞에 있는 원소를 제거
// Queue.front();
// 맨 앞에 있는 원소 반환
// Queue.empty();
// 비어있으면 true를 반환
bool check[MAX] = {0,};
//check[x]가 true면 방문한 것
Queue.push(1);
check[1] = true;
while(!Queue.empty()){
// 프론트 전 큐가 비어있는지 확인
int current = Queue.front();
Queue.pop();
cout << current << " ";
for(int i=0;i<myGraph[current].size();i++){
int next = myGraph[current][i];
if(check[next] == false){
check[next] = true;
Queue.push(next);
}
}
}
}
int main(){
cin >> n >> m;
int a,b;
for(int i=0;i<m;i++){
cin >> a>> b;
myGraph[a].push_back(b);
myGraph[b].push_back(a);
}
BFS();
return 0;
}