3175: 交错和查询

内存限制:256 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:0 解决:

题目描述

无限循环数字串S由长度为n的循环节s构成

设s为12345(n=5),则数字串S为123451234512345… 设Si为S的第i位数字,在上面的例子中,S1=1,S2=2,S6=1。

设S的一个子串S[l,r]的交错和为sum(l,r):

sum(l,r) = Sl - S1+1 + Sl+2 - Sl+3 + … + (-1)r-lSr

如sum(2,7) = 2 - 3 + 4 - 5 + 1 - 2 = -3   现给定循环节s,要求支持两种操作:

1 pos digit:

    修改循环节s上的某一位,即将spos改为digit。

2 l r:

    求S[l,r]内所有子串的交错和的和,即

输出 ans 对 109+7 的模。

输入

第一行一个整数n,表示循环节s的长度。

第二行一个长度为n的数字串,表示循环节s。

第三行一个整数m,表示操作次数。 以下m行,每行3个整数。

    若第一个数为1,表示是修改操作1 pos digit。

    若第一个数为2,表示是询问操作2 l r。

输出

对于每个询问操作输出一行,表示答案。

样例输入 复制

5
12345
5
2 1 5
2 6 10
1 3 5
2 1 5
2 1 6

样例输出 复制

19
19
25
36

提示

对于10%的数据点,n, m <= 50;

对于20%的数据点,n, m <= 1000;

对于40%的数据点,1 <= l <= r <= n;

对于100%的数据点,n, m <= 200000;1 <= l <= r <= 1018;1 <= pos <= n;0 <= digit <= 9;