rt
#include<bits/stdc++.h>
using namespace std;
int read(){
int x=0;
char c=getchar();
while(c>'9'||c<'0')c=getchar();
while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^'0'),c=getchar();
return x;
}
int n,m,tmp,tot,f[500005],last[500005];
bool F,flag,vis[500005],dis[500005];
stack<int>S;
vector<int>G[500005];
void dfs(int x){
if(vis[x]){
for(int i=1;i<=n;i++)vis[i]=0;
int k;
for(k=1;last[k]!=x;k++);
for(k;k<=tot;k++)vis[last[k]]=1;
flag=1;
return;
}
vis[x]=1;
last[++tot]=x;
for(auto v:G[x]){
if(v==f[x])continue;
f[v]=x;
dfs(v);
if(flag)return;
}
last[tot--]=0;
}
void dfs1(int x,int last);
void dfs2(int x,int last,int cnt){
if(dis[x])return;
dis[x]=1;
printf("%d ",x);
// cerr<<endl<<"---"<<x<<' '<<last<<' '<<cnt<<endl;
priority_queue<int,vector<int>,greater<int> >q;
for(auto v:G[x])if(v!=last)q.push(v);
bool f=1;
while(!q.empty()){
tmp=q.top();
q.pop();
if(vis[tmp]&&f){
f=0;
cnt=(q.empty()?cnt:q.top());
if(tmp<=cnt)dfs2(tmp,x,cnt);
}
else dfs1(tmp,x);
}
}
void dfs1(int x,int last){
if(dis[x])return;
dis[x]=1;
printf("%d ",x);
priority_queue<int,vector<int>,greater<int> >q;
for(auto v:G[x])if(v!=last)q.push(v);
while(!q.empty()){
tmp=q.top();
q.pop();
if(vis[tmp]&&!F){
F=1;
dfs2(tmp,x,INT_MAX);
}
else dfs1(tmp,x);
}
}
void Dfs(int x){
printf("%d ",x);
priority_queue<int,vector<int>,greater<int> >q;
for(auto v:G[x])if(v!=f[x])q.push(v),f[v]=x;
while(!q.empty()){
Dfs(q.top());
q.pop();
}
}
signed main()
{
// freopen("travel4.in","r",stdin);
// freopen("travel.out","w",stdout);
n=read();m=read();
for(int i=1,u,v;i<=m;i++)u=read(),v=read(),G[u].push_back(v),G[v].push_back(u);
if(n==m+1){
Dfs(1);
return 0;
}
dfs(1);
// for(int i=1;i<=n;i++)if(vis[i])cerr<<i<<' ';
// cerr<<endl;
if(vis[1])dfs2(1,0,INT_MAX);
else dfs1(1,0);
return 0;
}
/*
7 7
1 2
2 3
3 4
3 6
3 7
6 5
5 2
1 2 3 4 6 5 7
*/