Pagini recente » Cod sursa (job #715318) | Cod sursa (job #84069) | Cod sursa (job #621147) | Cod sursa (job #828637) | Cod sursa (job #2817878)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1e5,MMAX = 5e5;
pair <int, int> edges[MMAX + 5];
vector<int> edge[NMAX + 5];
bool viz[MMAX + 5];
stack <int> st;
vector <int> ans;
int main()
{
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m,a,b;
fin >> n >> m;
for (int i = 1;i <= m;i++) {
fin >> a >> b;
edge[a].push_back(i);
edge[b].push_back(i);
edges[i] = {a, b};
}
for (int i = 1;i <= n;i++)
if (edge[i].size() % 2) {
fout << -1;
return 0;
}
st.push(1);
while (!st.empty()) {
a = st.top();
if (!edge[a].empty()) {
b = edge[a].back();
edge[a].pop_back();
if(!viz[b]) {
viz[b] = 1;
st.push(edges[b].first ^ edges[b].second ^ a);
}
}
else {
ans.push_back(a);
st.pop();
}
}
for (int i = 0;i < ans.size() - 1;i++)
fout << ans[i] << " ";
return 0;
}