#include<bits/stdc++.h>
#include<vector>
#include<stack>
using namespace std;
vector<int> G[10005],ans;
stack<int> st;
bool vis[10005][10005];
int main(){
int n,m;
scanf("%d%d",&n,&m);
int i,v,p;
for(i=0;i<m;i++){
int a,b;
scanf("%d%d",&a,&b);
G[a].push_back(b);
G[b].push_back(a);
}
for(i=1;i<=n;i++)
sort(G[i].begin(),G[i].end());
st.push(1);
while(!st.empty()){
v=st.top();
for(i=0;i<G[v].size();i++){//遍历每一个未被访问的边
p=G[v][i];
if(!vis[v][p]){
st.push(p);
vis[v][p]=true;
vis[p][v]=true;
break;
}
}
if(i>=G[v].size()){ //该点所有的边都访问过了
st.pop();
ans.push_back(v);
}
}
int c=0;
for(i=1;i<=n;i++){
if(G[i].size()%2!=0)
c++;
}
if((c!=0&&c!=2)||(c==2&&G[1].size()%2==0)||ans.size()!=m+1)
printf("-1");
else{
for(i=ans.size()-1;i>=0;i--)
printf("%d ",ans[i]);
}
/*if(ans.size()==m+1&&(c==0||(c==2&&G[1].size()%2==1)))
for(i=ans.size()-1;i>=0;i--)
printf("%d ",ans[i]);
else
printf("-1");*/
return 0;
}
CCF认证201512-4送货 (自己写的)
最新推荐文章于 2021-04-06 16:33:29 发布