#include<bits/stdc++.h>
using namespace std;
int n,m,in[5005],vis[5005];
int sx,sy,cnt;
int maxi[5005],ths[5005];
vector<int> nbr[5005];
void find(int cur,int fa)
{
cout<<cur<<" ";
for(int i=0;i<=nbr[cur].size()-1;i++)
{
int nxt=nbr[cur][i];
if(nxt!=fa)
find(nxt,cur);
}
}
void find2(int cur,int fa)
{
ths[++cnt]=cur;
for(int i=0;i<=nbr[cur].size()-1;i++)
{
int nxt=nbr[cur][i];
if(cur==sx&&nxt==sy)
continue;
if(cur==sy&&nxt==sx)
continue;
if(nxt!=fa)
find2(nxt,cur);
}
}
int main()
{
memset(maxi,0X3f,sizeof(maxi));
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
nbr[x].push_back(y);
nbr[y].push_back(x);
in[x]++;
in[y]++;
}
for(int i=1;i<=n;i++)
sort(nbr[i].begin(),nbr[i].end());
if(n==m+1)
{
find(1,0);
return 0;
}
queue<int> q;
for(int i=1;i<=n;i++)
if(in[i]==1)
q.push(i);
while(!q.empty())
{
int now=q.front();
for(int i=0;i<=nbr[now].size()-1;i++)
{
int nxt=nbr[now][i];
if(vis[nxt]==1)
continue;
in[nxt]--;
if(in[nxt]==1)
q.push(nxt);
}
vis[now]=1;
q.pop();
}
for(int i=1;i<=n;i++)
if(vis[i]==0)
for(int j=0;j<=nbr[i].size()-1;j++)
{
cnt=0;
int nxt=nbr[i][j];
if(vis[nxt]==0){
sx=i,sy=nxt;
find2(1,0);
}
for(int now=1;now<=n;now++)
{
if(ths[now]<maxi[now])
{
for(;now<=n;now++)
maxi[now]=ths[now];
break;
}
else if(ths[now]>maxi[now])
break;
}
}
for(int i=1;i<=n;i++)
cout<<maxi[i]<<" ";
return 0;
}