Pagini recente » Cod sursa (job #3241356) | Cod sursa (job #1229679) | Cod sursa (job #1164984) | Cod sursa (job #200563) | Cod sursa (job #3216045)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
const int DIM = 100010;
int n, m, x, y;
int lastEdge[DIM], deg[DIM];
vector<pair<int, int>> l[DIM];
vector<int> sol;
stack<int> st;
bool visited[DIM * 5];
int main() {
fin >> n >> m;
for (int i = 1; i <= m; i++) {
fin >> x >> y;
l[x].emplace_back(i, y);
l[y].emplace_back(i, x);
deg[x]++, deg[y]++;
}
for (int i = 1; i <= n; i++) {
if (deg[i] % 2 != 0) {
fout << -1;
return 0;
}
}
st.push(1);
while (!st.empty()) {
int node = st.top();
if (deg[node] == 0) {
st.pop();
sol.push_back(node);
continue;
}
for (int i = lastEdge[node]; i < l[node].size(); i++) {
int adjEdge = l[node][i].first;
int adjNode = l[node][i].second;
if (!visited[adjEdge]) {
visited[adjEdge] = true;
st.push(adjNode);
deg[node]--, deg[adjNode]--;
lastEdge[node] = i + 1;
break;
}
}
}
for (int i = 0; i < sol.size() - 1; i++)
fout << sol[i] << ' ';
return 0;
}