#include<iostream>
#include<algorithm>
using namespace std;
const int maxsize=200;
struct Node
{
int data;
Node* next;
};
struct Graph
{
Node adjlist[maxsize];
int Vnum;
int Wnum;
};
int n,m;
Graph G;
bool maked[maxsize];
void CreatGraph(Graph& G,int Vnum,int Wnum)
{
G.Vnum=Vnum;
G.Wnum=Wnum;
for(int i=1;i<=n;i++)
{
G.adjlist[i].data=i;
G.adjlist[i].next=nullptr;
}
int a,b;
for(int i=0;i<m;i++)
{
cin>>a>>b;
Node* e=new Node;
e->data=a;
e->next=G.adjlist[b].next;
G.adjlist[b].next=e;
e=new Node;
e->data=b;
e->next=G.adjlist[a].next;
G.adjlist[a].next=e;
}
}
void DFS(int i)
{
cout<<i<<" ";
int top=0;
int Stack[maxsize];
Stack[top++]=i;
maked[i]=true;
while(top>0)
{
int flag=0;
Node* p=G.adjlist[Stack[top-1]].next;
while(p)
{
if(!maked[p->data])
flag=p->data;
p=p->next;
}
if(flag==0)
top--;
else
{
Stack[top++]=flag;
maked[flag]=true;
cout<<flag<<" ";
}
}
}
int main()
{
cin>>n>>m;
CreatGraph(G,n,m);
DFS(1);
return 0;
}