#bitflyer2018finale. [bitflyer2018_final_e]数式とクエリ

[bitflyer2018_final_e]数式とクエリ

问题描述

给定只包含 (, ), +, -, *, a 的数学表达式 SS(请参考问题描述中的详细说明)。定义 NNSS 中出现的 a 的个数。

给定 NN 个整数 a1,...,aNa_1, ..., a_NQQ 个由两个整数 (bi,xi)(b_i, x_i) 组成的查询,请处理这些查询。

查询:将给定数学表达式中从左到右的第 bib_ia 替换为 xix_i,将从左到右的第 1,...,bi1,bi+1,...,N1, ..., b_i-1, b_i+1, ..., Na 分别替换为 a1,...,abi1,abi+1,...,aNa_1, ..., a_{b_i-1}, a_{b_i+1}, ..., a_N,并输出替换后的数学表达式的值与 109+710^9+7 取模后的结果,该结果为大于等于 00 且小于等于 109+610^9+6 的整数。

给定的数学表达式 SS 符合以下 BNF 表示法的 <expr> 符号:

<expr> ::= <term> | <expr> '+' <term> | <expr> '-' <term>
<term> ::= <value> | <term> '*' <value>
<value> ::= 'a' | '(' <expr> ')' 

约束条件

NN 为给定的数学表达式中 a 的个数。

  • SS 的长度不超过 200,000200,000
  • SS 可表示为问题描述中的 BNF 表示法的 <expr> 符号
  • 0ai<109+70 ≤ a_i < 10^9+7
  • 1Q1051 ≤ Q ≤ 10^5
  • 1biN1 ≤ b_i ≤ N
  • 0xi<109+70 ≤ x_i < 10^9+7
  • xix_i 为整数

输入

输入以以下形式从标准输入中给出:

SS QQ a1a_1 ... aNa_N b1b_1 x1x_1 : bQb_Q xQx_Q

输出

输出共 QQ 行。第 ii 行(1iQ1 ≤ i ≤ Q)输出第 ii 个查询的答案。


示例输入 1

(a-(a))*a
4
0 1 2
1 1
1 2
2 1
1 4

示例输出 1

0
2
1000000005
6

例如,在第一个查询中,将从左到右的第 11a 替换为 x1=1x_1 = 1,将从左到右的第 22a 替换为 a2=1a_2 = 1,将从左到右的第 33a 替换为 a3=2a_3 = 2,计算结果为 (1(1))\*2=0(1-(1))\*2 = 0,因此答案为 00

在第三个查询中,将从左到右的第 11a 替换为 a1=0a_1 = 0,将从左到右的第 22a 替换为 x3=1x_3 = 1,将从左到右的第 33a 替换为 a3=2a_3 = 2,计算结果为 (0(1))\*2=2(0-(1))\*2 = -2,在模 109+710^9+7 的情况下,2-2 同余于 00109+610^9+6 之间的整数 109+510^9+5,因此答案为 109+510^9+5


示例输入 2

(a)*a+((a+(a*(a))-(a)*a+a*a))*a
10
8 6 6 4 8 1 4 3 8 9
3 4
3 9
8 4
3 7
4 0
8 9
3 6
9 0
6 8
9 4

示例输出 2

552
597
642
579
282
1002
570
354
318
462