#include<bits/stdc++.h>
using namespace std;
#define Pair pair<int,int>
#define mk make_pair
const int N=5e3+7;
int n,m;
vector<int> nxt[N];
bool vis[N],flt[N];
bool flag=false;
queue<int> ans;
void cir(int it,int fa,int be){
vis[it]=true;
for(int v:nxt[it]){
if(v==fa) continue;
if(v==be) flag=true;
if(vis[v]) continue;
cir(v,it,be);
}
}
void find_circle(){
for(int i=1;i<=n;++i){
flag=false;
memset(vis,0,sizeof(vis));
cir(i,0,i);
if(flag){
flt[i]=true;
}
}
}
bool ret=false;
void dfs(int it,int fa,int minn){
cout<<it<<" ";
priority_queue<int,vector<int>,greater<int> > qu;
vis[it]=true;
ans.push(it);
int maxt=0,mint=0x3f3f3f3f;
for(int v:nxt[it]){
if(vis[v]) continue;
qu.push(v);
if(flt[v]){
mint=min(mint,v);
maxt=max(maxt,v);
}
}
if(!flt[it]){
while(!qu.empty()){
dfs(qu.top(),it,minn);
qu.pop();
}
}
else{
int xtt=minn;
if(!xtt) xtt=maxt;
while(!qu.empty()){
int nxt=qu.top();
qu.pop();
if(vis[nxt]) continue;
if(flt[nxt]){
if(flt[fa]&&minn<nxt&&!ret){
ret=true;
continue;
}
dfs(nxt,it,(!qu.empty() ? qu.top():xtt));
}
else{
dfs(nxt,it,minn);
}
}
}
}
void solve(){
memset(vis,0,sizeof(vis));
dfs(1,0,0);
}
void print(){
puts("");
while(!ans.empty()){
cout<<ans.front()<<" ";
ans.pop();
}
puts("");
}
signed main(){
cin>>n>>m;
for(int i=1;i<=m;++i){
int u,v;
cin>>u>>v;
nxt[u].push_back(v);
nxt[v].push_back(u);
}
find_circle();
solve();
return 0;
}