Pagini recente » Cod sursa (job #1168529) | Cod sursa (job #1338604) | Cod sursa (job #936388) | Cod sursa (job #609636) | Cod sursa (job #1952624)
#include <iostream>
#include <fstream>
#include <unordered_map>
#include <vector>
#include <stack>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
vector<int> vec[100003];
int intr[100003];
stack<int> rez;
bool rem[500003];
pair<int, int> edg[500003];
void eul(int nod) {
int crr;
pair<int, int> T;
stack<int> S;
S.push(nod);
while(!S.empty()) {
nod = S.top();
if(vec[nod].empty()) {
rez.push(nod);
S.pop();
continue;
}
T = edg[vec[nod].back()];
if(rem[vec[nod].back()]) {
vec[nod].pop_back();
continue;
}
rem[vec[nod].back()] = true;
if(T.first == nod)
crr = T.second;
else
crr = T.first;
S.push(crr);
}
}
int main() {
int n,m;
in >> n >> m;
int x,y;
for(int i = 1; i <= m; i++) {
in >> x >> y;
vec[x].push_back(i);
vec[y].push_back(i);
edg[i] = {x, y};
intr[x]++;
intr[y]++;
}
for(int i = 1; i <= n; i++) {
if(intr[i]%2 == 1) {
out << -1;
return 0;
}
}
eul(1);
while(!rez.empty()) {
out << rez.top() << " ";
rez.pop();
}
return 0;
}