#include<bits/stdc++.h>
#define in scanf
#define out printf
#define pre(i,a,b) for(int i=(a);i<=(b);i++)
#define bre(i,a,b) for(int i=(a);i>=(b);i--)
#define gre(i,a) for(auto i:a)
#define wl while
#define aya long long
#define x1 xxxsssxxx
#define x0 xxxxsxxxx
#define y1 yyysssyyy
#define y0 yyyysyyyy
#define clean(a) wl(!a.empty()){a.pop();}
#define inf 0x3f3f3f3f
#define lnf 0x3f3f3f3f3f3f3f3f
using namespace std;
int n,m,flag[5005],cnt;
vector<int> g[5005];
void dfs(int u){
out("%d ",u);
flag[u]=1;
gre(v,g[u]){
if(!flag[v]){
dfs(v);
}
}
}
void Dfs(int u,int fa,int id){
if(cnt!=n) out("%d ",u),cnt++;
if(cnt==n){
return;
}
flag[u]=1;
pre(i,0,g[u].size()-1){
if(cnt==n){
return;
}
if(!flag[g[u][i]]){
if(fa!=-1&&id+1<g[fa].size()&&!flag[g[fa][id+1]]){
if(g[fa][id+1]<g[u][i]){
Dfs(g[fa][id+1],fa,id+1);
continue;
}
}
Dfs(g[u][i],u,i);
}
}
}
void solve(){
in("%d%d",&n,&m);
pre(i,1,m){
int u,v;
in("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
pre(i,1,n){
sort(g[i].begin(),g[i].end());
}
if(n!=m) dfs(1);
else Dfs(1,-1,-1);
return;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t=1;
pre(i,1,t){
solve();
}
return 0;
}