#include <bits/stdc++.h>
#pragma warning(disable : 4996)
#pragma comment(linker, "/STACK:666000000")
using namespace std;
const int inf = (1 << 30) - 1;
const long double eps = 1e-9;
const long double pi = fabs(atan2(0.0, -1.0));
void ML(const bool v) {
  if (v) return;
  int *ass;
  for (;;) {
    ass = new int[2500000];
    for (int i = 0; i < 2500000; i++) ass[i] = rand();
  }
}
void TL(const bool v) {
  if (v) return;
  int *ass;
  ass = new int[250];
  for (;;) {
    for (int i = 0; i < 250; i++) ass[i] = rand();
  }
}
void PE(const bool v) {
  if (v) return;
  puts("ass 1 2 3 4 5 6 fuck");
  exit(0);
}
map<int, pair<int, int> > w;
void add_edge(const int f, const int t, const bool v = true) {
  if (w.find(f) == w.end())
    w[f] = make_pair(t, -1);
  else
    w[f].second = t;
  if (v) add_edge(t, f, false);
}
void LoAd() {
  int n;
  cin >> n;
  for (int f, t, i = 0; i < n; i++) {
    scanf("%d%d", &f, &t);
    add_edge(f, t);
  }
}
void dfs(const int v, const int p) {
  printf("%d ", v);
  pair<int, int> nxt = w[v];
  if (nxt.first != p && nxt.first != -1) dfs(nxt.first, v);
  if (nxt.second != p && nxt.second != -1) dfs(nxt.second, v);
}
void SoLvE() {
  for (auto it = w.begin(); it != w.end(); it++) {
    if (it->second.second == -1) {
      dfs(it->first, -1);
      return;
    }
  }
}
int main() {
  srand((int)time(NULL));
  LoAd();
  SoLvE();
  return 0;
}
