#include <iostream> #include <string> #include <string.h> #include <vector> #include <stdio.h> #include <algorithm> #include <map> std::vector<int> num ; std::map<int , int> Id ; const int N = 100008 ; int u[N] , v[N] , stk[N*2] , top ; std::vector<std::pair<int,int> > g[N] ; bool mark[N*2] ; void dfs(int now){ for(std::vector<std::pair<int,int> >::iterator it = g[now].begin() ; it != g[now].end() ; it++){ if (! mark[it->second]){ mark[it->second] = 1; dfs(it->first); stk[++top] = it->first ; } } } int deg[N*2] ; int main() { int n ; while(scanf("%d",&n) != EOF){ num.clear() ; for(int i = 0 ; i < n ; i++){ scanf("%d%d" , &u[i] , &v[i]) ; num.push_back(u[i]) ; num.push_back(v[i]) ; } std::sort(num.begin() , num.end() ) ; int m = std::unique(num.begin() , num.end()) - num.begin() ; Id.clear() ; for(int i = 0 ; i < m ; i++){ Id[num[i]] = i ; } std::fill(deg , deg+m , 0) ; for(int i = 0 ; i < m ; i++) g[i].clear() ; for(int i = 0 ; i < n ; i++){ int uu = Id[u[i]] ; int vv = Id[v[i]] ; g[uu].push_back(std::make_pair(vv,i) ) ; g[vv].push_back(std::make_pair(uu,i) ) ; deg[uu]++ ; deg[vv]++ ; } int start = 0 ; for(int i = 0 ; i < m ; i++){ if(deg[i] & 1){ start = i ; break ; } } for(int i = 0 ; i < m ; i++) std::sort(g[i].begin() , g[i].end()) ; std::fill(mark , mark + m , 0) ; top = 0 ; dfs(start) ; printf("%d" , num[start]) ; for(int i = top ; i >=1 ; i--) printf(" %d" , num[stk[i]]) ; puts("") ; } return 0; }