Pagini recente » Cod sursa (job #1496015) | Cod sursa (job #120264) | Cod sursa (job #1832461) | Cod sursa (job #973113) | Cod sursa (job #2629609)
#include <bits/stdc++.h>
using namespace std;
ifstream r("ciclueuler.in");
ofstream w("ciclueuler.out");
int n, m;
class str{
public:
int n1, n2;
};
str p[500002];
vector<int>g[100002], f;
bool viz[100002];
void dfs(int a){
viz[a]=1;
for(auto it:g[a]){
if(viz[p[it].n1+p[it].n2-a]==0){
dfs(p[it].n1+p[it].n2-a);
}
}
}
bool ver(){
dfs(1);
for(int i=1;i<=n;i++){
if(viz[i]==0 || g[i].size()%2==1){
return 0;
}
}
return 1;
}
int edg(int a){
while(g[a].size()!=0 && viz[g[a].back()]==1){
g[a].pop_back();
}
if(g[a].size()!=0){
int b=g[a].back();
g[a].pop_back();
viz[b]=1;
return p[b].n1+p[b].n2-a;
}
return 0;
}
void euler(int a){
while(int b=edg(a)){
euler(b);
}
f.push_back(a);
}
int main()
{
r>>n>>m;
for(int i=0;i<m;i++){
int x, y;
r>>x>>y;
g[x].push_back(i);
g[y].push_back(i);
p[i].n1=x;
p[i].n2=y;
}
if(ver()==0){
w<<"-1\n";
return 0;
}
memset(viz, 0, sizeof(viz));
euler(1);
f.pop_back();
for(auto it:f){
w<<it<<" ";
}
return 0;
}