Pagini recente » Cod sursa (job #949582) | Cod sursa (job #108870) | Cod sursa (job #791121) | Cod sursa (job #1695122) | Cod sursa (job #1937102)
#include <fstream>
#include <vector>
#include <map>
#define DIM 100005
using namespace std;
ifstream f ("ciclueuler.in");
ofstream g ("ciclueuler.out");
int grad[DIM], c[DIM], ans[DIM];
int n, nrs, x, y, m;
map <pair <int, int>, int> mp;
vector <int> G[DIM];
void dfs (int node) {
c[node] = 1;
for (vector <int> :: iterator it = G[node].begin(); it != G[node].end(); ++it) {
if (c[*it] == 0) {
dfs (*it);
}
}
}
void euler (int node) {
while (!G[node].empty () && mp[{G[node][G[node].size() - 1], node}] <= 0)
G[node].pop_back ();
while (!G[node].empty ()) {
int v = G[node][G[node].size() - 1];
--mp[{node, v}], --mp[{v, node}];
G[node].pop_back();
euler (v);
while (!G[node].empty () && mp[{G[node][G[node].size() - 1], node}] <= 0)
G[node].pop_back ();
}
ans[++nrs] = node;
}
int main() {
f >> n >> m;
for (int i = 1; i <= m; ++i) {
f >> x >> y;
G[x].push_back (y);
G[y].push_back (x);
++mp[{x, y}];
++mp[{y, x}];
++grad[x];
++grad[y];
}
for (int i = 1; i <= n; ++i) {
if (grad[i] % 2 == 1) {
g << -1;
return 0;
}
}
dfs (1);
for (int i = 1; i <= n; ++i) {
if (c[i] == 0) {
g << -1;
return 0;
}
}
euler (1);
for (int i = 2; i <= nrs; ++i) {
g << ans[i] << " ";
}
return 0;
}