Pagini recente » Cod sursa (job #2341895) | Cod sursa (job #59776) | Cod sursa (job #345430) | Cod sursa (job #774125) | Cod sursa (job #3237017)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream f ("ciclueuler.in");
ofstream g ("ciclueuler.out");
const int NMAX = 100000;
int n, m;
struct muchie {
int x, y;
};
vector<int> G[NMAX+1], L;
vector<muchie> M;
vector<bool> elim;
stack<int> S;
void citire() {
int x, y;
f >> n >> m;
while(m--) {
f >> x >> y;
M.push_back({x, y});
elim.push_back(0);
G[x].push_back(M.size()-1);
G[y].push_back(M.size()-1);
}
}
void euler() {
int v, p, k;
S.push(1);
while(!S.empty()) {
v = S.top();
if(G[v].size() > 0) {
k = G[v].back();
G[v].pop_back();
if(!elim[k]) {
elim[k] = 1;
p = M[k].y;
if (p == v) p = M[k].x;
S.push(p);
}
} else {
L.push_back(v);
S.pop();
}
}
}
int main()
{
bool ok = 1;
citire();
for (int i=1; i<=n && ok; i++)
if(G[i].size() & 1)
ok = 0;
if(ok) {
euler();
for(int i=L.size()-1; i>=1; i--)
g << L[i] << ' ';
} else
g << "-1\n";
f.close();
g.close();
return 0;
}