#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T gcd(T a, T b) {
  while (b) {
    a %= b;
    swap(a, b);
  }
  return a;
}
template <class T>
inline T lcm(T a, T b) {
  return a / gcd(a, b) * b;
}
inline int nxt() {
  int wow;
  scanf("%d", &wow);
  return wow;
}
inline long long int lxt() {
  long long int wow;
  scanf("%lld", &wow);
  return wow;
}
inline double dxt() {
  double wow;
  scanf("%lf", &wow);
  return wow;
}
struct node {
  int first = -1, second = -1, lp = 0, rn = 0;
} p[200002];
int lft[200002 * 5], rgt[5 * 200002], ans[200002];
int main() {
  int n = nxt();
  for (int i = 1; i <= n; i++) {
    int x = nxt(), y = nxt();
    p[i].first = x, p[i].second = y;
    if (rgt[x] && x) {
      int pre = rgt[x];
      p[pre].rn = i;
      p[i].lp = pre;
    }
    if (lft[y] && y) {
      int next = lft[y];
      p[next].lp = i;
      p[i].rn = next;
    }
    lft[x] = i, rgt[y] = i;
  }
  int f, s;
  for (int i = 1; i <= n; i++) {
    if (p[i].lp == 0) {
      if (p[i].first == 0)
        s = i;
      else
        f = i;
    }
  }
  ans[1] = p[f].first;
  int cur = f;
  for (int i = 3; i <= n; i += 2) {
    ans[i] = p[cur].second;
    cur = p[cur].rn;
    if (cur == -1) break;
  }
  cur = s;
  for (int i = 2; i <= n; i += 2) {
    ans[i] = p[cur].second;
    cur = p[cur].rn;
    if (cur == -1) break;
  }
  for (int i = 1; i <= n; i++) printf("%d ", ans[i]);
  puts("");
  return 0;
}
