#include <bits/stdc++.h>
using namespace std;
const int N = 5010;
const int M = 200010;
const int MOD = 1000000007ll;
const int INF = 0x7fffffff;
const int dir[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
const double eps = 1e-7;
const double PI = acos(-1.0);
inline int sign(double x) { return (x > eps) - (x < -eps); }
template <class T>
T gcd(T a, T b) {
  return b ? gcd(b, a % b) : a;
}
template <class T>
T lcm(T a, T b) {
  return a / gcd(a, b) * b;
}
template <class T>
inline T lcm(T a, T b, T d) {
  return a / d * b;
}
template <class T>
inline T Min(T a, T b) {
  return a < b ? a : b;
}
template <class T>
inline T Max(T a, T b) {
  return a > b ? a : b;
}
template <class T>
inline T Min(T a, T b, T c) {
  return min(min(a, b), c);
}
template <class T>
inline T Max(T a, T b, T c) {
  return max(max(a, b), c);
}
template <class T>
inline T Min(T a, T b, T c, T d) {
  return min(min(a, b), min(c, d));
}
template <class T>
inline T Max(T a, T b, T c, T d) {
  return max(max(a, b), max(c, d));
}
int n, a, b;
map<int, int> ma;
bool vis[M * 5];
int ans[M];
int main() {
  while (scanf("%d", &n) != EOF) {
    memset(vis, false, sizeof(vis));
    int start = 0;
    vis[0] = true;
    for (int i = 0; i < n; i++) {
      scanf("%d%d", &a, &b);
      if (!vis[a]) start ^= a;
      if (!vis[b]) start ^= b;
      vis[a] = true;
      vis[b] = true;
      ma[a] = b;
      start ^= b;
    }
    int num = n / 2;
    int pre = 0;
    for (int i = 1; i <= num; i++) {
      pre = ma[pre];
      ans[2 * i] = pre;
    }
    num = n - num;
    pre = start;
    for (int i = 1; i <= num; i++) {
      ans[2 * i - 1] = pre;
      if (i < num) pre = ma[pre];
    }
    for (int i = 1; i < n; i++) printf("%d ", ans[i]);
    printf("%d\n", ans[n]);
  }
  return 0;
}
