#CF1225F. 树工厂

树工厂

F. 树工厂

每个测试的时间限制:2 秒
内存限制:512 兆字节

比特兰树工厂为各种工业应用生产树木。你被要求优化某种特定类型树木的生产,以完成一项特别大且重要的订单。

该树是一棵有根树,有 nn 个顶点,顶点标有从 00n1n-1 的互不相同的整数。标号为 00 的顶点是树的根,对于任意非根顶点 vv,其父节点 p(v)p(v) 的标号小于 vv 的标号。

工厂里的所有树都是由竹坯制成的。竹是一种有根树,其中每个顶点恰好有一个子节点,除了一个没有子节点的叶子顶点。竹坯的顶点可以在开始加工前任意标记。

要将竹子加工成另一棵树,只能进行一种操作:选择一个任意的非根顶点 vv,且其父节点 p(v)p(v) 也不是根节点。该操作将 vv 的父节点改为其父节点的父节点 p(p(v))p(p(v))。注意,其他所有顶点的父节点保持不变,特别地,vv 的子树不会改变。

效率至关重要,因此你必须最小化从竹坯生成目标树所需的操作次数。构造任意一个最优操作序列来生成目标树。

注意,生成树的标号必须与目标树的标号一致。形式上,两个树的根标号必须相同,并且对于具有相同标号的非根顶点,其父节点的标号也必须相同。

题目保证对于测试数据中的任何测试用例,答案都存在,并且进一步地,最优序列中的操作数不超过 10610^6。注意,任何不符合这些条件的 hack 都将无效。

输入
第一行包含一个整数 nn —— 树中顶点的数量(2n1052 \le n \le 10^5)。
第二行包含 n1n-1 个整数 p(1),,p(n1)p(1), \dots, p(n-1) —— 分别表示顶点 1,,n11, \dots, n-1 的父节点编号(0p(i)<i0 \le p(i) < i)。

输出
第一行打印 nn 个互不相同的整数 id1,,idnid_1, \dots, id_n —— 从根节点开始的竹坯的初始标号(0idi<n0 \le id_i < n)。
第二行打印一个整数 kk —— 操作序列中的操作数(0k1060 \le k \le 10^6)。
第三行打印 kk 个整数 v1,,vkv_1, \dots, v_k 描述按顺序执行的操作。第 ii 个操作包括将 p(vi)p(v_i) 改为 p(p(vi))p(p(v_i))。每个操作必须有效,即在操作时刻,viv_ip(vi)p(v_i) 都不能是树的根。


样例输入 1

5
0 0 1 1

样例输出 1

0 2 1 4 3
2
1 3

样例输入 2

4
0 1 2

样例输出 2

0 1 2 3
0