【模板】树上 K 级祖先

题目背景

**本题仅作为长链剖分求树上 $k$ 级祖先评测用,不保证卡掉了其他复杂度不正确的做法。**

题目描述

给定一棵 $n$ 个点的有根树。 有 $q$ 次询问,第 $i$ 次询问给定 $x_i, k_i$,要求点 $x_i$ 的 $k_i$ 级祖先,答案为 $ans_i$。特别地,$ans_0 = 0$。 本题中的询问将在程序内生成。 给定一个随机种子 $s$ 和一个随机函数 $\operatorname{get}(x)$: ```cpp #define ui unsigned int ui s; inline ui get(ui x) { x ^= x << 13; x ^= x >> 17; x ^= x << 5; return s = x; } ``` 你需要按顺序依次生成询问。 设 $d_i$ 为点 $i$ 的深度,其中根的深度为 $1$。 对于第 $i$ 次询问,$x_i = ((\operatorname{get}(s) \operatorname{xor} ans_{i-1}) \bmod n) + 1$,$k_i = (\operatorname{get}(s) \operatorname{xor} ans_{i-1}) \bmod d_{x_i}$。

输入输出格式

输入格式


第一行三个整数 $n, q, s$。 第二行 $n$ 个整数 $f_{1\dots n}$,其中 $f_i$ 表示 $i$ 的父亲。特别地,若 $f_i = 0$,则 $i$ 为根。

输出格式


一行一个整数,表示 $\operatorname{xor}_{i=1}^q i \times ans_i$。

输入输出样例

输入样例 #1

6 3 7
5 5 2 2 0 3

输出样例 #1

1

说明

【样例说明】 $x_1 = 4$,$k_1 = 1$,$ans_1 = 2$; $x_2 = 6$,$k_2 = 3$,$ans_2 = 5$; $x_3 = 3$,$k_3 = 0$,$ans_3 = 3$; 故输出 $1$。 --- 对于 $20\%$ 的数据,$n,q \le 10^3$。 对于 $50\%$ 的数据,$n,q \le 10^5$。 对于 $100\%$ 的数据,$2 \le n \le 5 \times 10^5$,$1 \le q \le 5 \times 10^6$,$1 \le s < 2^{32}$。