I Wanna Explore the Forest
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

\hspace{15pt}探险家小红来到了一片巨大的魔法森林中。森林有 10^{18} 个不同的地点,编号依次为整数 110^{18}。小红在地点 p 处建立了一个补给基地。
\hspace{15pt}一开始,森林中的 10^{18} 个地点两两之间互不联通。但魔法森林有着神奇的魔力,其结构会不断发生变化。每次森林发生变化时会遵循一个魔力值 m,森林将从小到大依序遍历所有 1\le i\le 10^{18}-m,对每个 i,基于当前已建立的小道(包括本次变化中之前步骤新建的小道),判断从地点 i 是否能抵达地点 i+m。若不能,则立即在地点 i 和地点 i+m 之间永久建立一条权值为 1 的双向小道。
\hspace{15pt}小红可能随时会向你求助:从给定的地点 s 能否抵达补给基地 p,如果可以,最少需要经过几条小道?

\hspace{15pt}注意:本题中的实际输入将按照某种方式进行加密,具体加密方法详见输入部分。

输入描述:

\hspace{15pt}第一行输入一个整数 q\left(1\leq q\leq 2\times 10^5\right),表示森林变化的次数与小红询问的次数之和。
\hspace{15pt}第二行输入一个整数 p\left(1\leq p\leq 2\times 10^5\right),表示补给基地的位置。
\hspace{15pt}此后 q 行,第 i 行输入两个整数 op_i, {\rm seed}_i \left(1\leq op_i\leq 2;\, 0 \leq {\rm seed}_i \leq 2\times 10^{18}\right),表示第 i 次操作的类型,随后在同一行:
\hspace{23pt}\bullet\,op_i=1,表示森林发生变化,遵循的魔力值由公式 m = x\operatorname{xor} \textrm{seed}_i \left(1\leq m\leq 2\times 10^5\right) 计算得到;
\hspace{23pt}\bullet\,op_i=2,表示最短路查询,起点编号由公式 s=x\operatorname{xor} \textrm{seed}_i \left(1\leq s\leq 10^{18}\right) 计算得到。
\hspace{15pt}其中,x 代表最近一次查询操作输出的答案;若当前尚无输出或最近一次输出为 -1,则取 x=0

【名词解释】
\hspace{15pt}\operatorname{xor}:对两个整数的二进制表示按位进行异或运算。如果您需要更多位运算相关的知识,可以参考 OI-Wiki的相关章节

输出描述:

\hspace{15pt}对于每次最短路径的询问,新起一行输出一个整数,表示从 sp 的最短路径长度;特别地,如果此时无法从 s 抵达补给基地 p,则输出 -1
示例1

输入

复制
3
2
2 6
1 1
2 6

输出

复制
-1
4

说明

\hspace{15pt}在这个样例中,最后一次询问结束前,x 始终为 0
\hspace{23pt}\bullet\,第一次询问最短路径时,所有地点之间互不联通,因此输出 -1
\hspace{23pt}\bullet\,第二次询问最短路径时,对所有的 1\le i\le 10^{18}-1,都存在一条边 (i,i+1),从地点 6 到补给基地 2 距离为 4,因此输出 4
示例2

输入

复制
8
1
2 1
1 6
2 7
1 13
2 9
1 9
1 19
2 6

输出

复制
0
1
-1
10

说明

\hspace{15pt}在这个样例中:
\hspace{23pt}\bullet\,第四次操作,森林发生变化,由于最后一次输出为 1,因此 x=1,此时实际遵循的魔力值为 1 \operatorname{xor} 13=12
\hspace{23pt}\bullet\,第五次操作,询问最短路径,由于最后一次输出仍然为 1,因此 x=1,此时实际询问的是从地点 1 \operatorname{xor} 9=8 能否抵达补给基地 p
示例3

输入

复制
9
14
2 998244353
1 6
2 10125067592
1 1687511257
2 1594862296
1 9
2 59867
1 9960
2 9981

输出

复制
-1
1687511263
-1
9979
8
示例4

输入

复制
4
1
1 200000
2 89942400001
1 381327
2 50894

输出

复制
449712
399995