3TLE

#include<bits/stdc++.h>
using namespace std;
vector<int>G[5005];
int n,m,cnt;
int vis[5005];
int k[5005],ans[5005];
int x,y;
inline int read()
{
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
inline void dfs2(int u,int fa){
if(vis[u]){
return;
}
vis[u]=1;
k[++cnt]=u;
for(int i=0;i<G[u].size();i++){
int v=G[u][i];
if(x == u && y == v){
continue;
}
if(x == v && y == u){
continue;
}
if(v==fa){
continue;
}
dfs2(v,u);
}
}
inline void update(){
for(int i=1;i<=n;i++){
ans[i] = k[i];
}
}
inline void check(){
if(ans[1] == 0){
update();
return;
}
for(int i=1;i<=n;i++){
if(k[i] > ans[i]){
return;
}
if(k[i] < ans[i]){
update();
return;
}
}
return;
}
int main(){
n = read();m = read();
for(int i=1;i<=m;i++){
int u,v;
u = read();v = read();
G[u].push_back(v);
G[v].push_back(u);
}
for(int i = 1;i<=n;i++){
sort(G[i].begin(),G[i].end());
}
if(m == (n-1)){
dfs2(1,0);
update();
}
if(m==n){
for(int i=1;i<=n;i++){
for(int j = 0;j<G[i].size();j++){
memset(vis,0,sizeof(vis));
cnt = 0;
x = i;
y = G[i][j];
dfs2(1,0);
if(cnt<n) continue;
check();
}
}
}
for(int i=1;i<=n;i++){
cout << ans[i] << " ";
}
return 0;
}