hzxphy @ 2023-09-27 21:06:50
#include <bits/stdc++.h>
using namespace std;
struct edge{
int u, v;
};
edge edges[1050];
set<int> s;
int D[2050];
int g[2050][2050];
int a[2050];
int GIN;
int M;
map<int, int> IO_m;
int OI_m[2050];
inline void Append(int u, int v) {
g[u][v]++; g[v][u]++;
D[u]++;
D[v]++;
}
inline int InGraph() {
for (int i = 1; i <= M; i++) {
Append(IO_m[edges[i].u], IO_m[edges[i].v]);
}
for (int i = 1; i <= (int)s.size(); i++) {
if (D[i] & 1) {
return i;
}
}
return 1;
}
inline void DFS(int U, int Len) {
if (Len == M + 1) {
for (int i = 1; i <= M + 1; i++) {
cout << OI_m[a[i]] << '\n';
}
// cout << '\n';
exit(0);
}
for (int i = 1; i <= (int)s.size(); i++) {
if (!g[U][i]) {
continue;
}
g[U][i]--;g[i][U]--;;
a[Len + 1] = i;
DFS(i, Len + 1);
g[U][i]++;g[i][U]++;
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> M;
for (int i = 1; i <= M; i++) {
cin >> edges[i].u >> edges[i].v;
s.insert(edges[i].u);
s.insert(edges[i].v);
}
int c = 0;
for (set<int>::iterator it = s.begin(); it != s.end(); it++) {
c++;
IO_m[*it] = c;
OI_m[c] = *it;
}
GIN = InGraph();
a[1] = GIN;
DFS(GIN, 1);
return 0;
}