CF1252K.Addition Robot

普及/提高-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Adding two numbers several times is a time-consuming task, so you want to build a robot. The robot should have a string S=S1S2SNS = S_1 S_2 \dots S_N of NN characters on its memory that represents addition instructions. Each character of the string, SiS_i , is either 'A' or 'B'.

You want to be able to give QQ commands to the robot, each command is either of the following types:

  • 1 LL RR . The robot should toggle all the characters of SiS_i where LiRL \le i \le R . Toggling a character means changing it to 'A' if it was previously 'B', or changing it to 'B' if it was previously 'A'.
  • 2 LL RR AA BB . The robot should call f(L,R,A,B)f(L, R, A, B) and return two integers as defined in the following pseudocode: ```
    ```
        function f(L, R, A, B):

    FOR i from L to R

    if S[i] = 'A'

    A = A + B

    else

    B = A + B

    return (A, B)

    ``` ```

You want to implement the robot's expected behavior.

输入格式

Input begins with a line containing two integers: NN QQ ( 1N,Q1000001 \le N, Q \le 100\,000 ) representing the number of characters in the robot's memory and the number of commands, respectively. The next line contains a string SS containing NN characters (each either 'A' or 'B') representing the initial string in the robot's memory. The next QQ lines each contains a command of the following types.

  • 1 LL RR ( 1LRN1 \le L \le R \le N )
  • 2 LL RR AA BB ( 1LRN1 \le L \le R \le N ; 0A,B1090 \le A, B \le 10^9 )

There is at least one command of the second type.

输出格式

For each command of the second type in the same order as input, output in a line two integers (separated by a single space), the value of AA and BB returned by f(L,R,A,B)f(L, R, A, B) , respectively. As this output can be large, you need to modulo the output by 10000000071\,000\,000\,007 .

输入输出样例

  • 输入#1

    5 3
    ABAAA
    2 1 5 1 1
    1 3 5
    2 2 5 0 1000000000
    

    输出#1

    11 3
    0 1000000000
    

说明/提示

Explanation for the sample input/output #1

For the first command, calling f(L,R,A,B)f(L, R, A, B) causes the following:

  • Initially, A=1A = 1 and B=1B = 1 .
  • At the end of i=1i = 1 , A=2A = 2 and B=1B = 1 .
  • At the end of i=2i = 2 , A=2A = 2 and B=3B = 3 .
  • At the end of i=3i = 3 , A=5A = 5 and B=3B = 3 .
  • At the end of i=4i = 4 , A=8A = 8 and B=3B = 3 .
  • At the end of i=5i = 5 , A=11A = 11 and B=3B = 3 .

Therefore, f(L,R,A,B)f(L, R, A, B) will return (11,3)(11, 3) .For the second command, string SS will be updated to "ABBBB".

For the third command, the value of AA will always be 00 and the value of BB will always be 10000000001\,000\,000\,000 . Therefore, f(L,R,A,B)f(L, R, A, B) will return (0,1000000000)(0, 1\,000\,000\,000) .

首页