Pagini recente » Cod sursa (job #2252480) | Cod sursa (job #1243240) | Cod sursa (job #2467175) | Cod sursa (job #828282) | Cod sursa (job #2480532)
#include <bits/stdc++.h>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
const int NMax = 100000;
const int MMax = 500000;
vector <int> G[NMax+5], Sol;
stack <int> S;
struct Edges {int x, y;}V[MMax+5];
int N, M, Use[MMax+5], Viz[NMax+5];
void Read() {
in >> N >> M;
for(int i = 1, x, y; i <= M; i++) {
in >> x >> y;
G[x].push_back(i);
G[y].push_back(i);
V[i] = {x,y};
}
}
int Vec(int Nod, int m) {
if(Nod == V[m].x)
return V[m].y;
return V[m].x;
}
void DFS(int Nod) {
Viz[Nod] = 1;
for (auto m : G[Nod]) {
int Vecin = Vec(Nod,m);
if (!Viz[Vecin])
DFS(Vecin);
}
}
bool Check () {
DFS(1);
for (int i = 1; i <= N; i++)
if(!Viz[i] || G[i].size() % 2)
return 0;
return 1;
}
void Solve () {
S.push(1);
while(!S.empty()) {
int Nod = S.top();
if(!G[Nod].empty()) {
int m = G[Nod].back(); G[Nod].pop_back();
if(!Use[m])
Use[m] = 1, S.push(Vec(Nod, m));
}
else
Sol.push_back(Nod), S.pop();
}
}
void Print() {
for(auto i : Sol)
out << i << " ";
out << '\n';
}
int main() {
Read();
if(!Check()) {
out << -1 << '\n';
return 0;
}
Solve();
Print();
}