CF1225F Tree Factory

题目描述

Bytelandian Tree Factory 生产各种工业用途的树,你的任务是为一个特别大的重要订单优化生产。 问题中的树是一棵 $n$ 个节点的有根树,每个顶点用不同的整数编号为 $[0,1,...,n-1]$,其中 $0$ 是根节点,且对于任何非根节点 $v$,它的父节点的编号 $p(v)$ 比它的编号 $v$ 小。 工厂里所有的树都是用竹子做的(可能不准确但不影响题意理解),这种竹子是有根的树,且每个节点只有一个子节点(除了叶子节点没有子节点),也就是说,它是一条链。加工前,竹子的节点可以随意编号。 要加工竹子为一棵树,可以进行这样的操作:选择任意一个不是根节点且父节点也不是根节点的节点 $v$,将它的父节点变成原先父节点的父节点即 $p(p(v))$,而其它节点的父节点都保持不变,$v$ 的子树也不会改变。 效率是至关重要的,所以在加工出所需要的树的前提下你应当最小化操作数。现在请你构造任何最优的操作序列以生成所需要的树。 注意:加工出的结果树的编号必须和所需要的树的编号一致,即根节点编号相同,其它所有具有相同编号的节点 $v$,其父节点编号 $p(v)$ 也应相同。 数据保证任何输入都至少有一种可行的方案,且最优操作序列最多包含 $10^6$ 个操作。而不符合这些条件的 hack 数据都是无效的(codeforce 允许 hack 其它人,洛谷上现在可以无视这句)。

输入格式

输入第一行是一个正整数 $n$,表示需求树中节点的数量 $(2\le n\le 10^5)$。 第二行有 $n-1$ 个整数 $[p_1,p_2,...,p_{n-1}]$,$p_i$ 表示需求树上节点编号为 $i$ 的父节点编号 $p(i)(1\le p_i\le i)$。

输出格式

输出第一行为 $n$ 个不同的整数 $[id_1,id_2,...,id_n]$,$id_i$ 表示使用的竹子从根开始第 $i$ 个节点的编号 $(0\le id_i