Pagini recente » Cod sursa (job #1143315) | Cod sursa (job #966324) | Cod sursa (job #599311) | Cod sursa (job #2365494) | Cod sursa (job #2976190)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
stack<int> S;
vector<pair<int, int>> G[100005];
vector<int> E;
int n, m, viz[500005];
void citire() {
fin>>n>>m;
for (int i=0; i<m; i++) {
int x, y;
fin>>x>>y;
G[x].push_back({y, i});
G[y].push_back({x, i});
}
}
void verif() {
for (int i=1; i<=n; i++)
if (G[i].size()%2!=0) {
fout<<"-1";
exit(0);
}
}
void euler() {
S.push(1);
while (!S.empty()) {
int x=S.top();
if (!G[x].empty()) {
int y=G[x].back().first;
int ind=G[x].back().second;
G[x].pop_back();
if (!viz[ind]) {
viz[ind]=1;
S.push(y);
}
} else {
S.pop();
E.push_back(x);
}
}
}
void afisare() {
E.pop_back();
for (auto i: E)
fout<<i<<" ";
}
int main() {
citire();
verif();
euler();
afisare();
return 0;
}