小蓝闲来无事,这天他建造了一个属于他的树上王国,王国的形态是一颗树,总共有 n 个节点,并且小蓝把他的王宫设立在了 1 号点,因此我们认为这棵树以 1 号节点为根,此外每个节点都有重兵把守,对于每个节点 i 守的士兵武力值为 wi ,小蓝想要测试每个点的士兵武力值是否合格,假设小蓝的武力值为 k ,如果士兵的武力值 wi& k =0 的话,我们认为第 i 个节点的武力值合格,由于自身原因,小蓝的武力值会不定期进行变化,另外小蓝也会不定期对某个节点的士兵数量进行变动进而影响该节点的武力值,具体来说,总共会有以下三种操作: 1、设节点 x,y 的简单路径上所有点的点集为 S ,问有多少个 S 的子集使得该子集中存在某个点的武力值不合格。 2、令 k = k | y 。 3、将点 x 的武力值变更为 y 。
输入描述: 第一行输入三个整数 n,k,q (1<= n <=1e5,0<= k <=1e9,1<= q <=3e5) 表示树上的节点数、小蓝初始的武力值、操作次数。 接下来一行输入 n 个数,第 i 个数表示 wi 。 接下来 n-1 行每行输入两个整数 x,y 表示节点 x 到节点 y 之间存在一条边。 接下来 q 行,每行输入三个整数 op,x,y ,表示一次操作。 若 op=1 ,则表示询问 x,y 之间的简单路径的答案 (1<= x,y <= n) 若 op=2 ,若 x=0 ,则表示令 k = k | y 。否则表示将第 x 个节点的武力值更改为 y(0<= y <=1e9)