#1404. 贰晋志运算

内存限制:512 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较
上传者: Corycle

题目描述

我们在二进制下定义了一种新的运算符 '⊙',称之为贰晋志运算

记这样一个运算符为 [a,b,c,d]⊙[a,b,c,d] ,其中a,b,c,da,b,c,d∈ { 0,10,1 }

现在给定一个长度为 nn0101 序列 {an{a_n}},以及 n1n-1 个运算符,第 ii 个运算符 i⊙_iaia_iai+1a_{i+1} 之间。

现在你需要对这个序列进行 mm 次操作,操作分为三种:

① 给定 ll , rr,求 allal+1l+1r1ara_l⊙_la_{l+1}⊙_{l+1}\cdots⊙_{r-1}a_r,特别地,当 l=rl = r 时答案为 ala_l

② 给定 xx , aa , bb , cc , dd , 表示将 i⊙_i 修改为 [a,b,c,d]⊙[a,b,c,d]

③ 给定 xx , vv,表示将 axa_x 修改为 vv

输入格式

第一行有两个正整数 nn , mm,其含义如题目描述所述。

接下来一行有一个长度为 nn0101 串,其中第 ii 个数表示 aia_i

接下来 n1n-1 行每行有四个正整数 aa , bb , cc , dd,表示 i⊙_i[a,b,c,d]⊙[a,b,c,d]

接下来 mm 行,每行有三个正整数 opop,若 opop11 ,则接下来的两个数 ll , rr 表示所询问区间;若 opop22 ,则接下来的五个数 x,a,b,c,dx,a,b,c,d 表示将 x⊙_x 修改为 [a,b,c,d]⊙[a,b,c,d];若 opop33,则接下来的两个数 xx , vv 表示将 axa_x 修改为 vv

输出格式

对于每一次询问,输出对应的结果,每一行只输出一个数。

样例

样例输入

5 5
01100
1 1 1 0
0 0 1 0
0 1 1 0
1 0 0 1
3 3 0
2 1 1 1 0 0
1 2 5
2 4 1 0 0 1
1 1 4

样例输出

0
1

数据范围与提示

数据保证 1n,m2×1051 \le n,m \le 2 \times 10^5 , 1lrn1 \le l \le r \le n , 1xn1 \le x \le n , a,b,c,d,va,b,c,d,v∈ { 0,10,1 }