#L3463. 「WC2021」表达式求值

「WC2021」表达式求值

题目描述

定义二元操作符 <<:对于两个长度都为 nn 的数组 A,BA, B(下标从 11nn),A<BA < B 的结果也是一个长度为 nn 的数组,记为 CC。则有 C[i]=min(A[i],B[i])C[i] = \min(A[i], B[i])1in1 \le i \le n)。

定义二元操作符 >>:对于两个长度都为 nn 的数组 A,BA, B(下标从 11nn),A>BA > B 的结果也是一个长度为 nn 的数组,记为 CC。则有 C[i]=max(A[i],B[i])C[i] = \max(A[i], B[i])1in1 \le i \le n)。

现在有 mm1m101 \le m \le 10)个长度均为 nn 的整数数组 A0,A1,,Am1A_0, A_1, \ldots , A_{m-1}。给定一个待计算的表达式 EE,其满足 EE 中出现的每个操作数都是 A0,A1,,Am1A_0, A_1, \ldots , A_{m-1} 其中之一,且 EE 中只包含 <<>> 两种操作符(<<>> 的运算优先级相同),因此该表达式的结果值也将是一个长度为 nn 的数组。

特殊地,表达式 EE 中还可能出现操作符 ??,它表示该运算符可能是 << 也可能是 >>。因此若表达式中有 tt??,则该表达式可生成 2t2^t 个可求确定值的表达式,从而可以得到 2t2^t 个结果值,你的任务就是求出这 2t2^t 个结果值(每个结果都是一个数组)中所有的元素的和。你只需要给出所有元素之和对 109+710^9 + 7 取模后的值。

输入格式

第一行两个整数 n,mn, m,分别表示数组长度与数组个数。

2m+12 \sim m + 1 行每行 nn 个用空格分隔的整数,第 ii 行第 jj 个元素代表 Ai2[j]A_{i-2}[j]2im+12 \le i \le m + 11jn1 \le j \le n)。

最后一行一个字符串 SS,表示表达式 EESS 中只包含字符 0099(())<<>>??,数字字符表示操作数的下标,例如字符 22 表示表达式中的操作数为 A2A_2

输出格式

仅一行一个整数,表示所有 2t2^t 个表达式的结果,它们的元素之和模 109+710^9 + 7 的值。

样例 1

输入 2 3 3 1 2 2 2 3 1>2?0

text

输出 9

text

表达式 EE 生成的算式有:

  • A1>A2<A0A_1>A_2<A_0,其结果为 [2,1][2, 1]
  • A1>A2>A0A_1>A_2>A_0,其结果为 [3,3][3, 3]

答案为 2+1+3+3=92 + 1 + 3 + 3 = 9

样例 2

输入 3 3 4 3 2 2 3 1 2 3 3 1?0>2?0

text

输出 36

text

样例 3

输入 5 3 354 321 414 205 257 458 996 554 635 730 681 374 903 966 349 2<0>2<0>(1>2)>(0<0)

text

输出 4276

text

样例 4

见附加文件中的 expr4.inexpr4.ans

数据范围与提示

对于所有测试点:1n5×1041 \le n \le 5 \times 10^41m101 \le m \le 10S5×104|S| \le 5 \times 10^41Ai[j]1091 \le A_i[j] \le 10^9

每个测试点的具体限制见下表:

| 测试点编号 | nn \le | E|E| \le | 特殊限制 | |------------|---------|----------|----------| | 141 \sim 4 | 55 | 1010 | SS 中不包含左右括号和问号 | | 575 \sim 7 | 1010 | 100100 | SS 中不包含问号 | | 898 \sim 9 | 22 | 50005000 | SS 中不包含左右括号 | | 101110 \sim 11 | | | 无 | | 121412 \sim 14 | 50005000 | | SS 中不包含问号 | | 151715 \sim 17 | 5×1045 \times 10^4 | | | | 182018 \sim 20 | | | 无 |