Pagini recente » Diferente pentru implica-te/arhiva-educationala intre reviziile 38 si 37 | Cod sursa (job #2197727) | Cod sursa (job #1051768) | Cod sursa (job #2002638) | Cod sursa (job #2072980)
#include <bits/stdc++.h>
using namespace std;
#define NMAX 100005
#define MMAX 500005
struct Muchie {
int from, to;
};
int N, M;
vector<Muchie> muchii;
bitset<MMAX> viz;
vector<int> graf[NMAX];
stack<int> stiva;
vector<int> sol;
void citire();
bool verificare();
void rezolvare();
void afisare();
int main() {
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
citire();
if(!verificare()) {
printf("-1\n");
return 0;
}
rezolvare();
afisare();
return 0;
}
void citire() {
scanf("%d %d ", &N, &M);
for (int i = 1; i <= M; i++) {
Muchie m;
scanf("%d %d ", &m.from, &m.to);
muchii.push_back(m);
graf[m.from].push_back(muchii.size() - 1);
graf[m.to].push_back(muchii.size() - 1);
}
}
bool verificare() {
for (int i = 1; i <= N; i++) {
if(graf[i].size() % 2)
return false;
}
return true;
}
void rezolvare() {
stiva.push(1);
while(!stiva.empty()) {
int nod = stiva.top();
if(graf[nod].size()) {
int it = graf[nod].back();
graf[nod].pop_back();
if(!viz[it]) {
stiva.push(muchii[it].from != nod ? muchii[it].from : muchii[it].to);
viz[it] = 1;
}
continue;
}
stiva.pop();
sol.push_back(nod);
}
}
void afisare() {
for (int i = 0; i < sol.size() - 1; i++)
printf("%d ", sol[i]);
}