#include<bits/stdc++.h>
using namespace std;
const int N=500005;
int n,m,u,v,fa[N],tmp=0x3f3f3f3f;
bool can,ring[N],vis[N],huis;
vector<int> mp[N];
inline void dfsshu(int x)
{
vis[x]=true;cout<<x<<" ";
for(int i=0;i<mp[x].size();i++)
{
int nex=mp[x][i];
if(!vis[nex])dfsshu(nex);
}
}
inline void get_ring(int now,int pre)
{
if(can)return;
if(!fa[now])fa[now]=pre;
else if(fa[now]!=pre)
{
while(pre!=now)
{ring[pre]=true;pre=fa[pre];}
ring[now]=can=true;
return;
}
for(int i=0;i<mp[now].size();i++)
{
int nex=mp[now][i];
if(nex!=pre)get_ring(nex,now);
}
}
inline void dfshuan(int x)
{
vis[x]=true;cout<<x<<" ";
if(ring[x])
{
bool flag=false;
for(int i=0;i<mp[x].size();i++)
{
if(huis)break;
int nex=mp[x][i];
if(vis[nex])continue;
if(ring[nex])
{
i++;while(i<mp[x].size()&&vis[mp[x][i]])i++;
if(i<mp[x].size())tmp=mp[x][i];
else if(nex>tmp)flag=huis=true;
break;
}
}
for(int i=0;i<mp[x].size();i++)
{
int nex=mp[x][i];
if(ring[nex]&&flag)continue;
if(!vis[nex])dfshuan(nex);
}
}
else
{
for(int i=0;i<mp[x].size();i++)
{
int nex=mp[x][i];
if(!vis[nex])dfshuan(nex);
}
}
}
signed main()
{
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>u>>v;
mp[u].push_back(v);
mp[v].push_back(u);
}
for(int i=1;i<=n;i++)
sort(mp[i].begin(),mp[i].end());
if(m==n-1)dfsshu(1);
else {get_ring(1,1);dfshuan(1);}
cout<<endl;
}