Pagini recente » Cod sursa (job #312685) | Istoria paginii runda/ultimasansa/clasament | Cod sursa (job #1390600) | Cod sursa (job #2139571) | Cod sursa (job #575168)
Cod sursa(job #575168)
#include <cstdio>
#include <vector>
#define mp make_pair
using namespace std;
const int N = 100010;
vector <int> v, rez;
vector <pair <int, int> > L[N];
int n, gr[N];
bool used[5 * N];
void read() {
int m = 0, x, y, l;
char str[105];
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
gets(str);
l = 0;
while(str[l] != ' ') {
n = n * 10 + str[l] - '0';
++ l;
}
++ l;
while(str[l] != ' ' && str[l]) {
m = m * 10 + str[l] - '0';
++ l;
}
for (int i = 1; i <= m; ++ i) {
gets(str);
l = 0;
x = y = 0;
while(str[l] != ' ') {
x = x * 10 + str[l] - '0';
++ l;
}
++ l;
while(str[l] != ' ' && str[l]) {
y = y * 10 + str[l] - '0';
++ l;
}
L[x].push_back(mp(y,i));
L[y].push_back(mp(x,i));
}
}
bool verif() {
for (int i = 1; i <= n; ++ i)
if (L[i].size() % 2 == 1)
return false;
return true;
}
void ciclu_euler() {
int nc;
bool ok;
v.push_back(1);
while (! v.empty()) {
ok = false;
nc = *(-- v.end());
for (vector <pair <int, int> > :: iterator it = L[nc].begin(); it != L[nc].end(); ++ it)
if (! used[it -> second]) {
used[it -> second] = 1;
v.push_back(it -> first);
ok = true;
break;
}
if (ok == false) {
rez.push_back(nc);
v.pop_back();
}
}
}
void afis() {
vector <int> :: iterator it = rez.end();
-- it;
for (it = it; it != rez.begin(); -- it)
printf("%d ", *it);
}
int main() {
read();
if (! verif()) {
printf("-1\n");
return 0;
}
ciclu_euler();
afis();
return 0;
}