83456 - 三目运算符

通过次数

0

提交次数

0

时间限制 : 2 秒
内存限制 : 512 MB

对于一个长度为 n (n \geq 3) 的 01 串 S = s_1 \ldots s_n,定义变换 T = f(S) = t_1 \ldots t_n 如下:

i, & i \geq 3 \text{ 且 } s{i-2} = 0, \ s{i-1}, & i \geq 3 \text{ 且 } s{i-2} = 1. \end{cases}$$

定义变换 f不动点 如下:若 01 串 T 满足 f(T) = T,则称 T 为变换 f 的不动点。

f^k(S)S 经过 k 次变换得到的串。特别地,记 f^0(S) = S。求最小的自然数 k,使得 f^k(S) 为变换 f 的不动点,即满足 f^{k+1}(S) = f^k(S) 的最小的自然数 k。可以证明,一定存在自然数 k 使得 f^k(S) 为变换 f 的不动点。

小 Z 觉得这个问题过于简单,因此他增加了 q 次修改操作。第 i (1 \leq i \leq q) 次修改会给定两个正整数 l_i, r_i (1 \leq l_i \leq r_i \leq n),然后将区间 [l_i, r_i] 内的所有原有的 0 替换为 1,所有原有的 1 替换为 0。你需要对初始时及每次修改后的字符串 S,求出最小的自然数 k,使得 f^k(S) 为变换 f 的不动点。

输入

本题包含多组测试数据。

输入的第一行包含两个非负整数 c, t,分别表示测试点编号与测试数据组数。c = 0 表示该测试点为样例。

接下来依次输入每组测试数据,对于每组测试数据:

第一行包含两个正整数 n, q,分别表示 S 的长度和修改次数。

第二行包含一个长度为 n 的 01 串 S = s_1 \ldots s_n,表示初始时的字符串。

i + 2 (1 \leq i \leq q) 行包含两个正整数 l_i, r_i,表示一次修改操作。

输出

对于每组测试数据,设初始时的答案为 k_0,第 i (1 \leq i \leq q) 次修改后的答案为 $ki,输出一行一个正整数,表示 \oplus{i=0}^{q} ((i + 1) \times k_i),其中 \oplus$ 表示 二进制按位异或

样例

输入

0 2
5 2
11010
3 3
2 2
7 3
1010100
7 7
2 4
1 2

输出

2
4

提示

该样例共包含两组测试数据。

对于第一组测试数据:

  • 初始时,S = 11010f(S) = 11100f^2(S) = 11110f^3(S) = f^4(S) = 11111,因此 k_0 = 3
  • 第一次操作后,S = 11110f(S) = f^2(S) = 11111,因此 k_1 = 1
  • 第二次操作后,S = 10110f(S) = f^2(S) = 10011,因此 k_2 = 1

故答案为 \bigoplus_{i=0}^{q} ((i+1) \times k_i) = (1 \times 3) \oplus (2 \times 1) \oplus (3 \times 1) = 3 \oplus 2 \oplus 3 = 2

对于第二组测试数据:

  • 初始时,S = 1010100k_0 = 1
  • 第一次操作后,S = 1010101k_1 = 1
  • 第二次操作后,S = 1101101k_2 = 5
  • 第三次操作后,S = 0001101k_3 = 2

故答案为 \bigoplus_{i=0}^{q} ((i+1) \times k_i) = (1 \times 1) \oplus (2 \times 1) \oplus (3 \times 5) \oplus (4 \times 2) = 4

来源

NOI