第一行输入一个正整数,代表症状的数量。
第二行输入一个长度为的01串,第
位是'1'代表小红目前有第
个症状,第
位是'0'代表没有该症状。
第三行输入一个正整数接下来的,代表药的数量。
行,每2行描述一副药:
第一行输入一个长度为的01串,代表该药能治疗的症状。'1'代表可以治疗,'0'代表不能治疗。
第二行输入一个长度为的01串,代表该药会产生的副作用。'1'代表会产生该症状,'0'代表不会产生。
接下来的一行,输入一个正整数,代表小红服用的药数量。
接下来的行,每行输入一个正整数
,代表小红服用了第
副药。
保证每副药副作用产生的症状和该药治疗的症状是不会重复的,即不会存在同一个位置的两个01串都是'1'。
输出行,每行输入一个正整数,代表当前小红服用药后,身体有多少症状。
4 0101 3 1100 0010 0101 1000 1001 0000 3 2 3 1
1 0 1
最开始小红有第二个、第四个症状。开始小红服用了第二副药,治好了这两个症状,但新增了第一个症状。目前症状数量为1。然后小红服用了第三副药,治好了第一个症状,并没有新增症状。目前症状数量为0。最后小红服用了第一副药。由于小红没有症状,所以没有治疗,但又新增了第三个症状,目前症状数量为1。
'''
第一行输入一个正整数n,代表症状的数量。
第二行输入一个长度为n的01串,第i位是'1'代表小红目前有第i个症状,第i位是'0'代表没有该症状。
第三行输入一个正整数m,代表药的数量。
接下来的2*m行,每2行描述一副药:
第一行输入一个长度为n的01串,代表该药能治疗的症状。'1'代表可以治疗,'0'代表不能治疗。
第二行输入一个长度为n的01串,代表该药会产生的副作用。'1'代表会产生该症状,'0'代表不会产生。
接下来的一行,输入一个正整数q,代表小红服用的药数量。
接下来的q行,每行输入一个正整数u,代表小红服用了第u副药。
1\leq n \leq 20
1\leq m,q \leq 10^4
1\leq a_i ,u\leq m
保证每副药副作用产生的症状和该药治疗的症状是不会重复的,即不会存在同一个位置的两个01串都是'1'。
'''
n = int(input())
# 将初始症状字符串转换为整数(二进制表示)
current = int(input().strip(), 2)
m = int(input())
medicines = []
for _ in range(m):
# 治疗效果:将字符串转换为整数(二进制表示)
treat = int(input().strip(), 2)
# 副作用:将字符串转换为整数(二进制表示)
side = int(input().strip(), 2)
medicines.append((treat, side))
q = int(input())
for _ in range(q):
u = int(input()) - 1 # 药物编号从0开始
treat, side = medicines[u]
# 治疗过程:使用按位与和取反操作移除被治疗的症状
# ~treat 生成治疗掩码的补码,将treat中为1的位变为0,其余为1
# current & ~treat 保留current中对应treat为0的位,移除treat为1的位
current &= ~treat
# 副作用过程:使用按位或操作添加副作用产生的症状
# side中为1的位会被添加到current中
current |= side
# 统计当前症状数量:转换为二进制字符串后统计'1'的个数
print(bin(current).count('1'))