Pagini recente » Cod sursa (job #1831793) | Cod sursa (job #3151001) | Cod sursa (job #1658915) | Cod sursa (job #586077) | Cod sursa (job #2748370)
#include <fstream>
#include <iostream>
#include <queue>
#include <stack>
#include <string>
#include <list>
#include <assert.h>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
list<int>G[100005];
stack<int>st;
vector<int> rez;
int n, m, i, x, y;
int main() {
fin >> n >> m;
for (i = 1; i <= m; i++) {
fin >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
for (i = 1; i <= n; i++) {
if (G[i].size() % 2 != 0) {
fout << -1;
return 0;
}
}
st.push(1);
while (st.size()) {
while (G[st.top()].size()) {
auto nn = G[st.top()].front();
//erase muchie
G[st.top()].pop_front();
auto it = G[nn].begin();
for (; *it != st.top() && it != G[nn].end(); ++it);
G[nn].erase(it);
st.push(nn);
}
rez.push_back(st.top());
st.pop();
}
rez.pop_back();
if (rez.size() != m) {
fout << -1;
return 0;
}
for (auto el : rez) {
fout << el << ' ';
}
}