Pagini recente » Cod sursa (job #2086205) | Cod sursa (job #2034559) | Cod sursa (job #844571) | Cod sursa (job #2150599) | Cod sursa (job #2217262)
#include <bits/stdc++.h>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
const int MMAX = 500005;
const int NMAX = 100005;
struct Edge{
int from, to;
bool del;
}e[MMAX];
vector<int> g[NMAX];
bool visited[NMAX];
int dfs(int node) {
int sum = 1;
for(int i : g[node]) {
int u = e[i].from;
if(u == node)
u = e[i].to;
if(!visited[u]) {
visited[u] = 1;
sum += dfs(u);
}
}
return sum;
}
stack<int> stk;
void euler(int node) {
if(g[node].size()) {
int pedge = g[node].back();
g[node].pop_back();
if(!e[pedge].del) {
int to = e[pedge].to;
if(to == node)
to = e[pedge].from;
e[pedge].del = 1;
euler(to);
}
euler(node);
} else
stk.push(node);
}
int main() {
ios::sync_with_stdio(false);
int n, m;
in >> n >> m;
for(int i = 1; i <= m; i ++) {
in >> e[i].from >> e[i].to;
e[i].del = 0;
g[e[i].from].push_back(i);
g[e[i].to].push_back(i);
}
visited[1] = 1;
int nr = dfs(1);
if(nr != n) {
out << -1;
return 0;
}
for(int i = 1; i <= n; i ++) {
if(g[i].size() % 2) {
out << -1;
return 0;
}
}
euler(1);
while(stk.size() > 1) {
out << stk.top() << " ";
stk.pop();
}
return 0;
}