#include<bits/stdc++.h>
#define ll long long
#define reg register
#define db double
#define il inline
using namespace std;
int n,m;
vector<int>g[500005];
int ans[500005],cnt;
void dfs(int x,int fa){
ans[++cnt]=x;
for(auto i:g[x]){
if(i==fa)continue;
dfs(i,x);
}
}
bool ring[500005];
bool vis[500005];
int fa[500005];
bool flag;
void dfsring(int x,int f){
// cout<<x<<"a"<<endl;
if(flag)return;
fa[x]=f;
for(auto i:g[x]){
if(i==f)continue;
if(fa[i]==0){
dfsring(i,x);
}else{
fa[i]=x;
flag=1;
while(!ring[x]){
// cout<<x<<endl;
ring[x]=1;x=fa[x];
}
}
}
}
int minn,id;
bool dao,use;
void work(int x){
if(!vis[x])
ans[++cnt]=x;
vis[x]=1;
for(int i=0;i<g[x].size();i++){
int y=g[x][i];
if(vis[y])continue;
if(use){
cout<<y<<endl;exit(0);
}
// cout<<x<<' '<<minn<<endl;
if(ring[y]==1){
if(i!=g[x].size()-1){
id=x;
minn=g[x][i+1];
}
}
if(i==g[x].size()-1&&ring[x]&&ring[y]&&id!=x){
if(y>minn&&use==0){
use=1;
work(id);
// cout<<"use";
}
}
work(y);
}
}
int main(){
scanf("%d%d",&n,&m);
for(reg int u,v,i=1;i<=m;i++){
scanf("%d%d",&u,&v);
g[u].push_back(v);g[v].push_back(u);
}
for(int i=1;i<=n;i++){
sort(g[i].begin(),g[i].end());
}
// cout<<endl;
if(m==n-1){
dfs(1,0);
}else{
dfsring(1,-1);
work(1);
}
for(int i=1;i<=n;i++)printf("%d ",ans[i]);
// cout<<id<<endl;
return 0;
}