题目链接:https://codeforces.com/contest/29/problem/C
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <cmath>
#include <climits>
#include <cstring>
#include <vector>
#include <string>
#include <queue>
#include <stack>
#include <deque>
#include <set>
#include <map>
#include <bitset>
#include <unordered_set>
#include <unordered_map>
#include <algorithm>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef double db;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
static const int INF=0x3f3f3f3f;
static const ll INFL=0x3f3f3f3f3f3f3f3f;
static const db EPS=1e-10;
static const db PI=acos(-1.0);
inline int read()
{
int X=0; bool flag=1; char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') flag=0; ch=getchar();}
while(ch>='0'&&ch<='9') {X=(X<<1)+(X<<3)+ch-'0'; ch=getchar();}
if(flag) return X;
return ~(X-1);
}
inline void write(int X)
{
if(X<0) {X=~(X-1); putchar('-');}
if(X>9) write(X/10);
putchar(X%10+'0');
}
static const int MAXN=1e5+10;
vector<int> alls;
int find(int x)
{
int l = 0, r = alls.size();
while (l < r)
{
int mid = l + r >> 1;
if (alls[mid] >= x) r = mid;
else l = mid + 1;
}
return r;
}
vector<int> g[MAXN];
int n;
int u[MAXN],v[MAXN];
void dfs(int u,int pre)
{
printf(" %d",alls[u]);
if(g[u].size()==1) return;
if(g[u][0]==pre) dfs(g[u][1],u);
else dfs(g[u][0],u);
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d",&u[i],&v[i]);
alls.push_back(u[i]);
alls.push_back(v[i]);
}
sort(alls.begin(),alls.end());
alls.erase(unique(alls.begin(),alls.end()),alls.end());
for(int i=0;i<n;i++)
{
int a=find(u[i]),b=find(v[i]);
g[a].push_back(b);
g[b].push_back(a);
}
for(int i=0;i<alls.size();i++)
if(g[i].size()==1)
{
printf("%d",alls[i]);
dfs(g[i][0],i);
puts("");
break;
}
return 0;
}