改编自某一道不明来源的题。
计算机内有一个长度为 n 的非负整数数组 a ,下标为 i(0≤i<n) 的元素取值范围为 [0,Ri] 。
由于某些特殊原因,若这 n 个数的同一个二进制位上的取值出现某些组合则计算机会炸掉。
具体地,设 bx=∑n−1i=0(⌊ai2x⌋mod ,那么只有当 \forall x \geq 0, b_x \in S 时计算机不会炸。
求能保证机子安全的数组取值的方案数,答案对 998244353 取模。
输入格式
第一行一个正整数 n ,接下来一行 n 个非负整数表示 R_{0 \sim n-1} 。
最后一行包含一个长度为 2^n 的 01 字符串 s 描述非负整数集合 S ,第 i 个字符为 1 表示 i-1 \in S 。
输出格式
输出一行一个整数,表示答案对 998244353 取模的结果。
样例数据
样例 1 输入
2
4 5
1110
样例 1 输出
19
样例 2 输入
3
7 4 5
11100101
样例 2 输出
80
子任务
对于所有的数据,保证 1≤n≤18,0 ≤ Ri < 2^{60},且 s_0 为 1。
测试点编号 | 特殊限制 |
---|---|
1 \sim 4 | n \le 2 |
5 \sim 7 | \forall i, R_i \le 3 |
8 \sim 10 | n \le 9 |
11 \sim 13 | n \le 11 |
14 \sim 16 | n \le 13 |
17 \sim 20 | 无 |