Middle
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

在一个风和日丽的下午,集训队蒟蒻cbyyx学了莫队,突发奇想的他想到了一个全新idea,给定一个正整数n和一个由’^’,’|’,’&’组成的长度为n的字符串op,再给n个非负整数表示~,接下来给定一个正整数m,表示m次询问,每次询问有两种形式:
1、给定一个正整数pos和一个非负整数val,修改为val
2、给定一个非负整数x和一个区间[l,r],ans=   op_{l+1} a_{l+1} ... op_{r} a_{r},其中每个op字符表示一个位运算符号,输出ans的值

输入描述:

第一行给定一个正整数n

第二行给定一个长度为n的字符串op,字符串下标从1开始

第三行给定n个非负整数表示~

第四行给定一个正整数m

接下来m行每行给定一个正整数k

如果k=1则再输入正整数pos和非负整数val

如果k=2则再输入非负整数x和一个正整数l和正整数r
1<=n<=1e5op中只包含’^’或‘|’或’&’

1<=m<=1e51<=k<=2

1<=pos<=n0<=val<=1e6,0<=x<=1e6,1<=l<=r<=n

输出描述:

对于每个k=2的询问,输出一个整数ans表示答案。

示例1

输入

复制
6
|^^|&|
2 9 10 2 0 4
6
2 1 1 6
1 1 10
2 3 1 1
1 3 8
2 9 1 5
2 1 1 6

输出

复制
4
11
0
4

说明

对于第一个询问,答案为1|2^9^10|2&0|4=4

第二次操作后,数组变为10 9 102 0 4

对于第三个询问,答案为3|10=11

第四次操作后,数组变为10 9 8 20 4

对于第五个询问,答案为9|10^9^8|2&0=0

备注:

运算时三个字符’^’和‘|’和’&’的运算优先级一样