http://icpc.upc.edu.cn/problem.php?cid=2919&pid=6
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int vis[5005];
int n,m;
vector<int>g[5005],cur,ans;
int from,to;
void dfs(int fa,int num)
{
if(cur>ans)
return ;
if(num>n) return ;
vis[fa]=1;
cur.push_back(fa);
for(int i=0; i<g[fa].size(); i++)
{
int next=g[fa][i];
if(fa==from&&next==to) continue;
if(fa==to&&next==from) continue;
if(vis[next]==1) continue;
dfs(next,num+1);
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1; i<=m; i++)
{
int u,v;
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());
for(int i=0; i<n; i++)
ans.push_back(n);
dfs(1,0);
ans=cur;
if(m==n-1)
{
for(int i=0; i<n; i++)
printf("%d ",ans[i]);
return 0;
}
else
{
for(int i=1; i<=n; i++)
{
for(int j=0; j<g[i].size(); j++)
{
from=i;
to=g[i][j];
cur.clear();
memset(vis,0,sizeof(vis));
dfs(1,0);
if(cur.size()==n) ans=min(ans,cur);
}
}
for(int i=0; i<ans.size(); i++)
printf("%d ",ans[i]);
return 0;
}
return 0;
}