#include <bits/stdc++.h>
#include <iostream>
#include <queue>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <string>
#include <math.h>
#include <set>
#include <map>
#define MAXN 1000000+10
#define INF 1000000000
#define eps 10e-6
#define ll long long
using namespace std;
bool cmp(int a, int b)
{
return a > b;
}
//*******无根树转为指定节点为根的有根树并输出每个节点的父亲节点***************************
vector<int> mp[MAXN]; //*****邻接表存储图
int pre[MAXN]; //*****存储每个节点的父亲节点
void dfs(int u, int fa) //***形参分别表示当前节点和其父亲节点
{
int len=mp[u].size(); //*****当前节点的儿子节点的个数
for(int i=; i<len; i++)
{
int v=mp[u][i]; //****选中当前节点的一个儿子节点作为下一个节点
if(v!=fa) //****如果父亲节点的儿子不是是自己,则其不为叶子节点,继续搜索
{
dfs(v, pre[v]=u);
}
}
}
int main(void)
{
std::ios::sync_with_stdio(false), cin.tie(), cout.tie();
int n;
cin >> n;
for(int i=; i<n-; i++)
{
int x, y;
cin >> x >> y;
mp[x].push_back(y);
mp[y].push_back(x);
}
int root;
cin >> root; //****输入目标根节点
pre[root]=-; //****根节点没有父亲节点
dfs(root, -);
for(int i=; i<n; i++)
{
if(pre[i]!=-)
{
cout << pre[i] << " ";
}
}
cout << endl;
return ;
}
/***************************
输入样例:
8
0 1
0 2
0 3
1 4
1 5
5 6
5 7
1
//*****************
输出样例:
1 0 0 1 1 5 5
//*****************
即0节点的父亲节点为1;
2,3节点的父亲节点为0;
4,5节点的父亲节点为1;
7,8节点的父亲节点为5;
*******************************/
//******刘汝佳算法竞赛入门经典p197**