만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

덧셈 또는 곱셈

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

요약
1부터 9까지의 숫자와 + 또는 × 연산자로 이어진 식의 값을 구합니다. 숫자 교환이나 연산자 뒤집기를 할 때마다 10^9+7로 나눈 나머지를 구합니다.
난이도

보통10점 중 6점

유형
세그먼트 트리, 수학
정답자
아직 제출이 없습니다

문제

여동생이 숫자 블록과 연산자 블록으로 이루어진 나무 수학 장난감을 가지고 놀고 있다. 숫자 블록에는 1부터 9까지의 한 자리 숫자가 하나씩 적혀 있다. 연산자 블록은 양면이 있고, 각 면에 +와 ×가 적혀 있다.

여동생은 숫자 블록과 연산자 블록을 번갈아 나열해 식을 만들었다. 첫 블록은 숫자, 둘째는 연산자, 셋째는 숫자이며 이후도 같은 순서다. 여동생은 이 식의 값을 알 수 있겠느냐고 묻는다.

그다음 여동생은 아래 움직임 중 하나를 반복해서 한다.

  • s ii jj (교환): ii번째와 jj번째 숫자 블록을 서로 바꾼다.
  • f ii (뒤집기): ii번째 연산자 블록을 뒤집는다. 연산자는 +와 ×가 번갈아 바뀐다.
  • a (전체 뒤집기): 식에 있는 모든 연산자 블록을 뒤집는다.

움직임을 할 때마다 바뀐 식의 값을 바로 답해야 한다. 값이 이전과 같을 수도 있다. 곱셈은 덧셈보다 먼저 계산한다는 점을 기억한다.

입력

첫 줄에 두 정수 NN (2≤N≤2×1052 \leq N \leq 2 \times 10^5)과 MM (1≤M≤2×1051 \leq M \leq 2 \times 10^5)이 주어진다. NN은 정수의 개수이고, MM은 질의의 개수이다.

둘째 줄에는 2N−12N - 1개의 문자로 이루어진 초기 식이 주어진다. 홀수 번째 위치에는 1부터 9까지의 한 자리 숫자가, 짝수 번째 위치에는 연산자 + 또는 *가 온다.

이어지는 MM개의 줄에는 여동생의 움직임이 하나씩 주어진다.

  • 교환 움직임은 s ii jj 형태이며, 1≤i,j≤N1 \leq i, j \leq N이다. i=ji = j이면 블록을 바꾸지 않는다.
  • 뒤집기 움직임은 f ii 형태이며, 1≤i≤N−11 \leq i \leq N-1이다. ii번째 연산자를 뒤집는다.
  • 전체 뒤집기 움직임은 a만으로 주어지며, 다른 값은 없다.

출력

첫 줄에 초기 식의 값을 출력한다. 이어서 MM개의 줄에 걸쳐 각 움직임 뒤의 값을 한 줄에 하나씩 출력한다. 값은 109+710^9 + 7로 나눈 나머지를 출력한다.

예제1

  1. 예제 1

    입력
    3 4
    2+3*4
    s 1 2
    a
    f 2
    a
    
    예상 출력
    14
    11
    10
    24
    9