쿼리는 락이 아니다

시간 제한2초메모리 제한1024 MB

요약
문자열의 한 글자를 바꾸는 갱신이 있을 때 구간 안에서 ROCK과 같은 부분열의 개수를 세어 1e9+7로 나눈 나머지를 구한다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 동적 계획법, 행렬, 분할 정복
정답자
아직 제출이 없습니다

문제

나락도 락이고, 부모님께 온 연락도 락이고, 오락가락?도 락?이지만?, 아쉽게도 쿼리는 락이 아니다.

알파벳 대문자로 이루어진 길이 NN의 문자열 S=s_1s_2…s_NS=s\_{1} s\_{2} \ldots s\_{N}가 주어진다. 이때, 다음과 같은 쿼리를 QQ번 처리해야 한다.

  • 11 idxidx cc: s_idxs\_{idx}를 cc로 변경한다. (1≤idx≤N, c(1 \leq idx \leq N,\ c는 알파벳 대문자))
  • 22 ll rr: s_ls_l+1…s_rs\_{l} s\_{l+1} \ldots s\_{r}의 부분열 중 ROCK으로 끝나는 문자열의 개수를 출력한다. 단, 수가 매우 클 수 있으니 109+710^9+7로 나눈 나머지를 출력한다. (1≤l≤r≤N)(1 \leq l \leq r \leq N)

입력

첫 번째 줄에 문자열 SS의 길이 NN이 주어진다. (4≤N≤250000)(4 \leq N \leq 250000)

두 번째 줄에 알파벳 대문자로만 이루어진 문자열 SS가 주어진다.

세 번째 줄에 쿼리의 개수 QQ가 주어진다. (1≤Q≤250000)(1 \leq Q \leq 250000)

네 번째 줄부터 QQ개의 줄에 걸쳐 쿼리가 주어진다. 가장 마지막으로 주어지는 쿼리는 22번 쿼리이다.

출력

22번 쿼리에 대해 정답을 한 줄에 하나씩 출력한다.

힌트

문자열의 부분열이란 문자열에서 00개 이상의 문자를 지운 문자열을 의미한다. 예를 들어, aan은 hanyang의 부분열이다.

예제1

  1. 예제 1

    입력
    6
    NAROCK
    3
    2 1 6
    1 3 C
    2 2 5
    
    예상 출력
    4
    0