#include<bits/stdc++.h>
using namespace std;
int n,m;
bool vis[500005],on[500005];
vector<int> g[500005];
void tree(int rt,int fa)
{
printf("%d ",rt);
sort(g[rt].begin(),g[rt].end());
for(int i:g[rt])
if(i!=fa)tree(i,rt);
}
int getring(int rt,int fa)
{
vis[rt]=1;
sort(g[rt].begin(),g[rt].end());
for(auto i=g[rt].begin();i!=g[rt].end();i++)
{
if(*i==fa)continue;
if(vis[*i])
{
on[rt]=1;
return *i;
}
int tmp=getring(*i,rt);
if(tmp==0)continue;
on[rt]=1;
if(rt==tmp)return 0;
return tmp;
}
return 0;
}
void deledge(int x,auto i)
{
g[*i].erase(lower_bound(g[*i].begin(),g[*i].end(),x));
g[x].erase(i);
}
bool flag=0;
void ring(int rt,int fa,int cmn)
{
vis[rt]=1;printf("%d ",rt,fa,cmn);
for(auto i=g[rt].begin();i!=g[rt].end();i++)
{
if(*i==fa)continue;
if(vis[*i])
{
flag=1;
deledge(rt,i);
i--;continue;
}
if((i==g[rt].end()-1 || i==g[rt].end()-2 && *(i+1)==fa) && *i>cmn && flag==0 && on[rt] && on[*i])
{
flag=1;
deledge(rt,i);
return;
}
if(i==g[rt].end()-1)
ring(*i,rt,cmn);
else if(*(i+1)==fa)
{
if(i+2==g[rt].end())
ring(*i,rt,cmn);
else
ring(*i,rt,*(i+2));
}
else
ring(*i,rt,*(i+1));
}
}
int main()
{
int u,v;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
if(m<n){tree(1,0);return 0;}
getring(1,0);
memset(vis,0,sizeof(vis));
ring(1,0,n+1);
return 0;
}