만드는 중입니다

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

캔디 압축

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

요약
문자열에 한 글자를 삽입하고 구간을 삭제하는 연산을 처리하며, 삭제할 때마다 지워진 부분 문자열을 출력합니다.
난이도

보통10점 중 7점

유형
구현, 트리, 분할 정복
정답자
아직 제출이 없습니다

문제

당신은 Candy Compress라는 모바일 게임을 개발하고 있다. 이 게임에서는 색깔이 있는 캔디 여러 개가 왼쪽에서 오른쪽으로 한 줄로 놓여 있다. 색깔은 2626가지가 있다. 플레이어는 언제든지 원하는 위치에 캔디를 추가하거나, 이웃한 캔디 일부를 제거할 수 있다. 제거한 캔디의 색깔에 따라 점수를 얻는다.

이 게임을 만들려면 다음 자료 구조를 구현해야 한다. 자료 구조는 처음에 11부터 시작하는 길이 nn의 문자열을 읽는다. 이 문자열은 처음 놓인 캔디의 색깔을 나타낸다. 문자열은 대문자 알파벳 A부터 Z까지로만 이루어진다. 문자열을 읽은 뒤에는 지원해야 할 연산이 qq개 있다.

  • 연산 1: 대문자 알파벳 cc를 문자열에 삽입하여, 새 문자열의 ii번째 위치에 오도록 한다. 특히 i=1i = 1이면 문자열의 맨 앞에 cc를 삽입한다. 이 연산 직전 문자열의 길이를 mm이라 하면 1≤i≤m+11 ≤ i ≤ m + 1이 보장된다.
  • 연산 2: ll번째부터 rr번째 위치까지의 문자를 양 끝을 포함하여 제거한다. 이 연산 직전 문자열의 길이를 mm이라 하면 1≤l≤r≤m1 ≤ l ≤ r ≤ m이 보장된다.

연산 2마다 게임이 줄 점수를 계산할 수 있도록, 제거되는 문자를 구해야 한다. 즉, 연산 직전 문자열에서 ll번째부터 rr번째 위치까지의 내용을 구해야 한다.

입력

첫 줄에 두 정수 nn과 qq가 주어진다 (1≤n≤300 0001 ≤ n ≤ 300\,000; 1≤q≤300 0001 ≤ q ≤ 300\,000). 둘째 줄에는 처음 읽어 들일 길이 nn의 대문자 알파벳 문자열이 주어진다. 이어지는 qq개의 줄에는 다음 형식 중 하나의 연산이 주어진다.

  1. 1 cc ii는 연산 1이다. cc는 대문자 알파벳이며, 1≤i≤m+11 ≤ i ≤ m + 1이다. 여기서 mm은 이 연산 직전 문자열의 길이이다.
  2. 2 ll rr은 연산 2이다. 1≤l≤r≤m1 ≤ l ≤ r ≤ m이다. 여기서 mm은 이 연산 직전 문자열의 길이이다.

연산은 주어진 순서대로 수행한다. 연산 2는 적어도 하나 있다.

출력

각 연산 2마다, 입력 순서대로 그 연산으로 제거되는 문자들을 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    3 5
    XPA
    1 P 3
    1 P 5
    2 2 5
    1 Y 2
    2 1 2
    
    예상 출력
    PPAP
    XY
    
  2. 예제 2

    입력
    27 7
    ICPCASIAPACIFICCHAMPIONSHIP
    2 5 8
    2 5 11
    1 A 5
    1 P 6
    1 A 7
    1 C 8
    2 1 8
    
    예상 출력
    ASIA
    PACIFIC
    ICPCAPAC