Pagini recente » Cod sursa (job #830419) | Cod sursa (job #1566381) | Cod sursa (job #1482863) | Cod sursa (job #382592) | Cod sursa (job #2030233)
#include <cstdio>
#include <vector>
#include <stack>
#define MAXN (int)1e5
#define MAXM (int)5e5
FILE *fin, *fout;
int N, M;
int fr[MAXM + 1], to[MAXM + 1];
std::vector <int> v[MAXN + 1];
std::stack <int> st;
bool viz[MAXM + 1];
std::vector <int> ans;
int main() {
fin = fopen("ciclueuler.in", "r");
fout = fopen("ciclueuler.out", "w");
fscanf(fin, "%d%d", &N, &M);
for (int i = 1; i <= M; i++) {
int x, y;
fscanf(fin, "%d%d", &x, &y);
fr[i] = x, to[i] = y;
v[x].push_back(i);
v[y].push_back(i);
}
for(int i = 1;i <= N;i++)
if (v[i].size() & 1) {
fprintf(fout, "-1");
return 0;
}
st.push(1);
while (!st.empty()) {
int nod = st.top();
if (v[nod].size()) {
int much = v[nod].back();
v[nod].pop_back();
if (!viz[much]) {
viz[much] = 1;
int To = to[much];
st.push(To);
}
}
else {
st.pop();
ans.push_back(nod);
}
}
for (int i = 0; i < ans.size(); i++) {
fprintf(fout, "%d ", ans[i]);
}
fclose(fin);
fclose(fout);
return 0;
}