Pagini recente » Cod sursa (job #2584238) | Cod sursa (job #2933208) | Cod sursa (job #1189454) | Cod sursa (job #1477951) | Cod sursa (job #1511805)
#include <cstdio>
#include <vector>
using namespace std;
const int MAXN = 100000;
const int MAXM = 500000;
FILE *f = fopen("ciclueuler.in", "r");
FILE *h = fopen("ciclueuler.out", "w");
int n, m;
struct muchie{
int nr, vecin;
};
vector<muchie> graf[MAXN + 1];
int grad[MAXN + 1];
bool utilizat[MAXM + 1];
int raspuns[MAXM + 2], k;
void ciclu(int x) {
for (int i = 0; i < (int)graf[x].size(); ++i) {
if (!utilizat[graf[x][i].nr]) {
utilizat[graf[x][i].nr] = true;
ciclu(graf[x][i].vecin);
}
}
raspuns[++k] = x;
}
int main() {
fscanf(f, "%d%d", &n, &m);
for (int i = 1; i <= m; ++i) {
int x, y;
fscanf(f, "%d%d", &x, &y);
graf[x].push_back({i, y});
graf[y].push_back({i, x});
++grad[x];
++grad[y];
}
bool existaSol = true;
for (int i = 1; i <= n && existaSol; ++i) {
if(grad[i] & 1) {
existaSol = false;
}
}
if (existaSol) {
int i = 1;
while(grad[i] == 0 && i < n) {
++i;
}
ciclu(i);
if (k != m + 1) {
fprintf(h , "-1\n");
} else {
for (int i = 1; i <= m; ++i) {
fprintf(h, "%d ", raspuns[i]);
}
}
} else {
fprintf(h , "-1\n");
}
return 0;
}