#include <bits/stdc++.h>
#define fi first
#define endl '\n'
#define se second
#define int long long
#define getName(x) #x
#define vi std::vector<int>
#define isz(v) (int) v.size()
#define pii std::pair<int, int>
#define all(v) v.begin(), v.end()
#define loop cerr << "here" << endl;
#define breakLoop if(TIME > 1) break;
#define TIME 1.0 * clock() / CLOCKS_PER_SEC
using namespace std;
typedef long long ll;
const int MAXN = 2e6 + 7;

template <typename T> void maximize(T &a, T b){if(a < b) a = b;}
template <typename T> void minimize(T &a, T b){if(a > b) a = b;}
vi save; set <int> s;
int nxt[MAXN], pre[MAXN], n, ans[MAXN], start;
bool check[MAXN];

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    #define task "t"
    if (fopen(task".inp", "r")){
        freopen(task".inp", "r", stdin);
        freopen(task".out", "w", stdout);
    }
    cin >> n;
    for(int i = 1; i <= n; i++){
        int x, y;
        cin >> x >> y;
        s.insert(x), s.insert(y);
        nxt[x] = y;
        pre[y] = x;
        if(x == 0) start = y;
    }
    for(auto x : s) if(!pre[x]) save.push_back(x);
    int curIdx = 2;
    while(start){
            check[start] = 1;
        ans[curIdx] = start;
        curIdx += 2;
        start = nxt[start];
    }
    for(auto pos : save){
        if(check[pos]) continue;
        curIdx = 1;
        int curVal = pos;
        while(curVal){
            ans[curIdx] = curVal;
            curIdx += 2;
            curVal = nxt[curVal];
        }
    }
    for(int i = 1; i <= n; i++) cout << ans[i] << ' ';
}
