#include<bits/stdc++.h> const int N=2e6+50; int n, head[N], nxt[N], ver[N], dep[N],prv[N],suc[N],cnt; inline void add(int u, int v) { nxt[++cnt] =head[u], ver[cnt]=v, head[u]=cnt; } void dfs (int u, int fa) { dep[u]=dep[fa]+1; for(int i=head[u]; i; i=nxt[i]) if (ver[i] !=fa) dfs(ver[i],u); } void solve(int u,int fa,bool rv=false) { int isLeaf=true,t=u; for (int i=head[u]; i; i=nxt[i]) { int y=ver[i]; if (y !=fa) { isLeaf= false; solve(y,u,rv ^ 1); if (rv) { int mp=prv[y]; suc[t]=y,prv[y]=t,t=mp; } else { suc[t]=suc[y]; prv[suc[y]]=t; suc[t=y]=0; } } } if (isLeaf) suc[u] =prv[u]=u; else suc[t]=u,prv[u]=t; } int main() { scanf ("%d", &n) ; for (int i=1,u,v; i<n; ++i) { scanf ("%d%d",&u,&v); add(u,v) ; add(v,u) ; } dfs (1,1) ; solve(1,-1); printf("1 "); int p=1,v=suc[p]; while (v !=p) { printf ("%d ",v) ; v=suc[v]; } return 0; }