만드는 중입니다

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

디퍼와 장치

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

요약
구간 안의 모든 문자열 뒤에 문자열을 덧붙이는 명령과, 특정 칸 문자열의 부분 문자열을 묻는 명령을 처리합니다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 이분 탐색, 구현
정답자
아직 제출이 없습니다

문제

디퍼가 오늘 다락방에서 이상한 장치를 발견했다. 장치에는 1번부터 nn번까지 번호가 붙은 슬롯이 차례로 놓여 있다. 각 슬롯에는 문자열이 하나씩 들어 있고, 처음에는 모든 슬롯이 빈 문자열이다. 장치는 ll, rr, ss가 주어지면 ll번 슬롯부터 rr번 슬롯까지 모든 문자열의 끝에 문자열 ss를 덧붙인다.

디퍼는 메이블이 장치의 동작을 모델링할 수 없다고 내기를 걸었다. 디퍼가 명령을 내리면 메이블은 같은 명령을 동시에 따라 한다. 메이블이 장치의 동작을 정확히 재현하는지 확인하기 위해 디퍼는 가끔 다음 질문을 한다. 슬롯 ii의 문자열에서 xx번째 문자부터 yy번째 문자까지의 부분 문자열은 무엇인가? 메이블은 이 과정을 시뮬레이션하는 프로그램을 작성하려고 한다. 이를 도와 달라.

입력

첫 줄에 두 자연수 nn, mm이 주어진다. nn은 슬롯의 개수이고, mm은 디퍼의 명령 개수이다 (1≤n≤2⋅1051 \le n \le 2 \cdot 10^5; 1≤m≤2⋅1051 \le m \le 2 \cdot 10^5).

다음 mm개의 줄에 명령이 한 줄에 하나씩 주어진다. 명령은 다음 두 종류 중 하나이다.

  • 1 ll rr ss: ll번 슬롯부터 rr번 슬롯까지 모든 문자열의 끝에 비어 있지 않은 문자열 ss를 덧붙인다 (1≤l≤r≤n1 \le l \le r \le n). 문자열 ss는 영어 소문자로만 이루어져 있다.
  • 2 ii xx yy: ii번 슬롯의 문자열에서 xx번째 문자부터 yy번째 문자까지의 부분 문자열을 구한다 (1≤i≤n1 \le i \le n; 1≤x≤y1 \le x \le y). 슬롯 ii의 문자열 길이는 항상 yy 이상이다.

1번 종류 명령에 주어지는 문자열 길이의 합은 10610^6을 넘지 않는다. 2번 종류 명령에서 구하는 부분 문자열 길이의 합은 10610^6을 넘지 않는다.

출력

2번 종류 명령마다 답을 별도의 줄에 출력한다.

예제2

  1. 예제 1

    입력
    4 4
    1 2 2 two
    1 2 3 aa
    2 3 1 1
    2 2 1 4
    
    예상 출력
    a
    twoa
    
  2. 예제 2

    입력
    3 6
    1 1 2 ab
    1 2 3 cd
    2 2 2 4
    2 3 1 2
    1 1 3 xyzu
    2 1 2 5
    
    예상 출력
    bcd
    cd
    bxyz