3450 - 动态树(Link Cut Tree)

通过次数

2

提交次数

4

时间限制 : 1 秒
内存限制 : 128 MB

给定 n 个点以及每个点的权值,要你处理接下来的 m 个操作。
操作有四种,操作从 03 编号。点从 1n 编号。

  • 0 x y 代表询问从 xy 的路径上的点的权值的 \text{xor} 和。不保证 xy 是联通的。
  • 1 x y 代表连接 xy,若 xy 已经联通则无需连接。
  • 2 x y 代表删除边 (x,y),不保证边 (x,y) 存在。
  • 3 x y 代表将点 x 上的权值变成 y

输入

第一行两个整数,分别为 nm,代表点数和操作数。

接下来 n 行,每行一个整数,第 (i + 1) 行的整数 a_i 表示节点 i 的权值。

接下来 m 行,每行三个整数,分别代表操作类型和操作所需的量。

输出

对于每一个 0 号操作,你须输出一行一个整数,表示 xy 的路径上点权的 \text{xor} 和,如果不连通,则输出-1。

样例

输入

3 3 
1
2
3
1 1 2
0 1 2 
0 1 1

输出

3
1

输入

5 14
114
514
19
19
810
1 1 2
0 1 2
2 1 2
1 1 2
1 2 3
2 1 3
1 1 3
1 4 5
1 2 5
0 3 5
0 3 4
3 5 233333
0 1 5
0 2 5

输出

624
315
296
232709
232823

提示

对于全部的测试点,保证:

  • 1 \leq n \leq 10^51 \leq m \leq 3 \times 10^51 \leq a_i \leq 10^9
  • 对于操作 0, 1, 2,保证 1 \leq x, y \leq n
  • 对于操作 3,保证 1 \leq x \leq n1 \leq y \leq 10^9