C1526 [Ynoi]2014-F

内存限制:256 MB 时间限制:2000 ms

题目描述

定义项为指若干个($\ge 1$)数字(0~9)相连得到的字符串(如123000是合法的项,wxh-1+5是不合法的项)。

一个合法的表达式可以为一个项(如233)、两个表达式以+-*相连(如2*3+5*56-6*6)、一个表达式在左右添一对括号(如(2*3*3))。

注意:空串不是一个合法的表达式

在一开始,你会得到一个长为 $n$ 的字符串,之后会给定 $m$ 个操作。

有两种操作:

$1\ x\ y$ 表示将位置 $x$ 的字符改成 $y$。

$2\ l\ r$ 表示询问 $[l,r]$ 的字符串作为表达式求值在 $\mathrm{mod}\ 10^9+7$ 意义下的结果。若该串不是一个合法的表达式,结果为 $-1$。

输入格式

第一行有两个整数 $n,m$。

第二行有一个长为 $n$ 的字符串。

接下来 $m$ 行,每行为 $1\ x\ y$ 或 $2\ l\ r$,分别表示两种操作。

输出

对于每个 $2$ 操作,输出一个整数,表示该操作的答案。

样例

样例输入 1

5 12 2*(3) 2 1 1 2 4 4 2 1 5 1 3 2 2 1 5 2 1 4 2 1 3 2 2 3 1 1 ( 1 2 5 1 3 + 2 1 5

样例输出 1

2 3 6 -1 46 4 -1 8

提示

$1\le n,m\le 10^5,1\le l\le r\le n,1\le x\le n$。

字符集为0123456789+-*()

若将(作为 $1$,)作为 $-1$,其他字符作为 $0$,则保证在任意时刻,该串的任意前缀和的绝对值不超过 $50$。