Pagini recente » Cod sursa (job #1805839) | Cod sursa (job #1269396) | Cod sursa (job #1531160) | Cod sursa (job #1755876) | Cod sursa (job #2437743)
// Matteo Verzotti - C++
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <stack>
#include <queue>
#include <deque>
#include <vector>
#include <ctime>
#include <map>
#include <chrono>
#include <cmath>
#define INF 0x3f3f3f3f
#define MAX(a,b) a>b ? a:b
#define MIN(a,b) a<b ? a:b
using namespace std;
const int NODE = 1e5;
const int EDGE = 5 * 1e5;
pair <int,int> edge[5 + EDGE];
vector <int> v[5 + NODE];
bool viz[5 + EDGE];
vector <int> sol;
stack <int> st;
int main() {
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
int n,m,i,j,x,y;
scanf("%d%d",&n,&m);
for(i=1; i<=m; i++) {
scanf("%d%d",&x,&y);
edge[i] = {x,y};
v[x].push_back(i);
v[y].push_back(i);
}
for(i=1; i<=n; i++) {
if(v[i].size() & 1) {
printf("-1\n");
return 0;
}
}
st.push(1);
while(!st.empty()) {
int node = st.top();
if(v[node].size() > 0) {
int mu = v[node].back();
v[node].pop_back();
if(!viz[mu]) {
viz[mu] = 1;
x = edge[mu].first;
y = edge[mu].second;
if(y == node)
swap(x,y);
st.push(y);
}
} else {
sol.push_back(node);
st.pop();
}
}
sol.pop_back();
for(i=0; i<sol.size(); i++)
printf("%d ",sol[i]);
printf("\n");
return 0;
}