#A0051. 表达式

表达式

CC 热衷于学习数理逻辑。

有一天,他发现了一种特别的逻辑表达式。

在这种逻辑表达式中,所有操作数都是变量,且它们的取值只能为 0011,运算从左往右进行。

如果表达式中有括号,则先计算括号内的子表达式的值。

特别的,这种表达式有且仅有以下几种运算:

  1. 与运算:𝑎 & 𝑏𝑎\ \&\ 𝑏。当且仅当 𝑎𝑎𝑏𝑏 的值都为 11 时,该表达式的值为 11。其余情况该表达式的值为 00
  2. 或运算:𝑎  𝑏𝑎\ |\ 𝑏。当且仅当 𝑎𝑎𝑏𝑏 的值都为 00 时,该表达式的值为 00。其余情况该表达式的值为 11
  3. 取反运算:!𝑎! 𝑎。当且仅当 𝑎𝑎 的值为 00 时,该表达式的值为 11。其余情况该表达式的值为 00

CC 想知道,给定一个逻辑表达式和其中每一个操作数的初始取值后,再取反某一个操作数的值时,原表达式的值为多少。

为了化简对表达式的处理,我们有如下约定:表达式将采用后缀表达式的方式输入。

后缀表达式的定义如下:

  1. 如果 𝐸𝐸 是一个操作数,则 𝐸𝐸 的后缀表达式是它本身。
  2. 如果 𝐸𝐸𝐸1 𝑜𝑝 𝐸2𝐸_1\ 𝑜𝑝\ 𝐸_2 形式的表达式,其中 𝑜𝑝𝑜𝑝 是任何二元操作符,且优先级不高于 𝐸1𝐸2𝐸_1、𝐸_2 中括号外的操作符,则 𝐸𝐸 的后缀式为 𝐸1’ 𝐸2’ 𝑜𝑝𝐸_1’\ 𝐸_2’\ 𝑜𝑝,其中 𝐸1’、𝐸2𝐸_1’、𝐸_2’ 分别为 𝐸1𝐸2𝐸_1、𝐸_2 的后缀式。
  3. 如果 𝐸𝐸(𝐸1)(𝐸_1) 形式的表达式,则 𝐸1𝐸_1 的后缀式就是 𝐸𝐸 的后缀式。

同时为了方便,输入中:

a) 与运算符(&\&)、或运算符(|)、取反运算符(!!)的左右均有一个空格,但表达式末尾没有空格
b) 操作数由小写字母 xx 与一个正整数拼接而成,正整数表示这个变量的下标。例如:x10x10,表示下标为 1010 的变量 𝑥10𝑥_{10}

数据保证每个变量在表达式中出现恰好一次

输入格式

第一行包含一个字符串 𝑠𝑠,表示上文描述的表达式。

第二行包含一个正整数 𝑛𝑛,表示表达式中变量的数量。表达式中变量的下标为 1,2,,𝑛1,2, … , 𝑛

第三行包含 𝑛𝑛 个整数,第 𝑖𝑖 个整数表示变量 𝑥𝑖𝑥_𝑖 的初值。

第四行包含一个正整数 𝑞𝑞,表示询问的个数。

接下来 𝑞𝑞 行,每行一个正整数,表示需要取反的变量的下标。

注意,每一个询问的修改都是临时的,即之前询问中的修改不会对后续的询问造成影响。

数据保证输入的表达式合法。

变量的初值为 0011

输出格式

输出一共有 𝑞𝑞 行,每行一个 0011,表示该询问下表达式的值。

数据范围

对于 20%20\% 的数据,表达式中有且仅有与运算(&\&)或者或运算(|)。
对于另外 30%30\% 的数据,𝑠1000𝑞1000𝑛1000|𝑠| ≤ 1000,𝑞 ≤ 1000,𝑛 ≤ 1000
对于另外 20%20\% 的数据,变量的初值全为 00 或全为 11
对于 100%100\% 的数据,1𝑠1×1061𝑞1×1051 ≤ |𝑠| ≤ 1 × 10^6,1 ≤ 𝑞 ≤ 1 × 10^52𝑛1×1052 ≤ 𝑛 ≤ 1 × 10^5
其中,𝑠|𝑠| 表示字符串 𝑠𝑠 的长度。

输入样例1:

x1 x2 & x3 |
3
1 0 1
3
1
2
3

输出样例1:

1
1
0

样例1解释

该后缀表达式的中缀表达式形式为 (𝑥1 & 𝑥2)  𝑥3(𝑥_1\ \&\ 𝑥_2)\ |\ 𝑥_3

对于第一次询问,将 𝑥1𝑥_1 的值取反。此时,三个操作数对应的赋值依次为 0010,0,1。原表达式的值为 (0 & 0)  1=1(0\ \&\ 0)\ |\ 1 = 1

对于第二次询问,将 𝑥2𝑥_2 的值取反。此时,三个操作数对应的赋值依次为 1111,1,1。原表达式的值为 (1 & 1)  1=1(1\ \&\ 1)\ |\ 1 = 1

对于第三次询问,将 𝑥3𝑥_3 的值取反。此时,三个操作数对应的赋值依次为 1001,0,0。原表达式的值为 (1 & 0)  0=0(1\ \&\ 0)\ |\ 0 = 0

输入样例2:

x1 ! x2 x4 | x3 x5 ! & & ! &
5
0 1 0 1 1
3
1
3
5

输出样例2:

0
1
1

样例2解释

该表达式的中缀表达式形式为 (!𝑥1)(! 𝑥_1) &\& (!((𝑥2  𝑥4)(!(( 𝑥_2\ | \ 𝑥_4) &\& (𝑥3 & (!𝑥5))))( 𝑥_3 \ \& \ (! 𝑥_5) ) ))