RT
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,u,v,net[500005],lst[500005],lt;
vector<int>vt[500005];
bool vs[500005],vis[500005],ed;
stack<int>st;
void dfs1(int x,int fa){
cout << x << " ";
for(int i:vt[x]){
if(i==fa||(u==x&&v==i)||(u==i&&v==x))continue;
dfs1(i,x);
}
return;
}
int hh;
void zh(int x,int fa){
st.push(x);
vs[x] = 1;
for(int i:vt[x]){
if(i==fa)continue;
if(vs[i]){
while(!st.empty()&&st.top()!=i){
vis[st.top()] = 1;
net[lt] = st.top();
lt = st.top();
st.pop();
}
net[lt] = i;
net[i] = x;
vis[i] = 1;
hh = i;
ed = 1;
return;
}
zh(i,x);
if(ed)return;
}
st.pop();
return;
}
bool b = 1;
void dfs(int x,int fa){
if(u)return;
if(vis[x]){
bool f = 0;
for(int i:vt[x]){
if(i==fa||i==lst[x]||i==net[x])continue;
if(fa==lst[x]){
if(i<net[x]||f)dfs(i,x);
else{
lt = i;
dfs(net[x],x);
dfs(i,x);
f = 1;
}
}
else if(fa==net[x]){
if(i<lst[x]||f)dfs(i,x);
else{
lt = i;
dfs(lst[x],x);
dfs(i,x);
f = 1;
}
}
else{
if(i<min(lst[x],net[x])||f)dfs(i,x);
else{
f = 1;
if(lst[x]<net[x]){
lt = min(i,net[x]);
dfs(lst[x],x);
}
else{
lt = min(i,lst[x]);
dfs(net[x],x);
}
dfs(i,x);
}
}
}
if(!f){
if(fa==lst[x]){
if(lt<net[x]){
u = x;
v = net[x];
return;
}
else dfs(net[x],x);
}
else if(fa==net[x]){
if(lt<lst[x]){
u = x;
v = lst[x];
return;
}
else dfs(lst[x],x);
}
else{
if(net[x]<lst[x]){
lt = lst[x];
dfs(net[x],x);
dfs(lst[x],x);
}
else{
lt = net[x];
dfs(lst[x],x);
dfs(net[x],x);
}
}
}
}
else{
for(int i:vt[x]){
if(i==fa)continue;
dfs(i,x);
}
}
return;
}
signed main(){
// freopen("hack.in","r",stdin);
// freopen("ans.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for(int i = 1;i<=m;i++){
cin >> u >> v;
vt[u].push_back(v);
vt[v].push_back(u);
}
for(int i = 1;i<=n;i++)sort(vt[i].begin(),vt[i].end());
u = v = 0;
if(m==n-1)dfs1(1,0);
else{
zh(1,0);
for(int i = 1;i<=n;i++)if(vis[i])lst[net[i]] = i;
lt = 0;
memset(vs,0,sizeof(0));
dfs(1,0);
if(u==0&&v==0)u = hh,v = net[hh];
memset(vs,0,sizeof(0));
dfs1(1,0);
}
return 0;
}