만드는 중입니다

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

부분 문자열 정렬

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

요약
각 질의마다 A, B, C에서 l부터 r까지의 부분 문자열 세 개를 사전순으로 정렬해 같은 자리에 다시 씁니다. 모든 질의를 처리한 뒤의 A, B, C를 출력합니다.
난이도

어려움10점 중 8점

유형
문자열, 세그먼트 트리, 문자열 매칭
정답자
아직 제출이 없습니다

문제

이 문제에서 모든 문자열의 인덱스는 1부터 시작한다. sis_i는 문자열 ss의 ii번째 문자이고, sl..rs_{l..r}은 slsl+1⋯srs_l s_{l+1} \cdots s_r로 이루어진 부분 문자열이다.

길이가 각각 NN인 문자열 AA, BB, CC가 주어진다. 쿼리 QQ개를 주어진 순서대로 처리해야 한다. 각 쿼리는 정수 ll과 rr을 받으며, 다음 절차를 따른다.

  1. 부분 문자열 Al..rA_{l..r}, Bl..rB_{l..r}, Cl..rC_{l..r}를 복사한다. 복사본을 각각 xx, yy, zz라 한다.
  2. [x,y,z][x, y, z]를 사전순으로 정렬한다. 정렬 결과를 [x′,y′,z′][x', y', z']라 한다.
  3. Al..rA_{l..r}을 x′x'으로, Bl..rB_{l..r}을 y′y'으로, Cl..rC_{l..r}을 z′z'으로 바꾼다.

모든 쿼리를 처리한 뒤 AA, BB, CC의 최종 값을 구하라.

입력

첫 줄에 정수 NN과 QQ가 주어진다 (1≤N≤100 0001 \le N \le 100\,000, 1≤Q≤100 0001 \le Q \le 100\,000). 다음 세 줄에는 각각 길이 NN의 소문자 문자열 AA, BB, CC가 주어진다. 이어서 QQ개의 줄에 정수 ll과 rr (1≤l≤r≤N1 \le l \le r \le N)이 주어진다.

출력

AA, BB, CC의 최종 값을 이 순서대로 세 줄에 출력한다.

예제3

  1. 예제 1

    입력
    5 2
    icpca
    siaja
    karta
    2 4
    1 5
    
    예상 출력
    iarta
    kiaja
    scpca
    
  2. 예제 2

    입력
    6 6
    aabbcc
    bcacab
    cbcaba
    1 1
    2 2
    3 3
    4 4
    5 5
    6 6
    
    예상 출력
    aaaaaa
    bbbbbb
    cccccc
    
  3. 예제 3

    입력
    3 1
    aba
    aab
    aac
    1 3
    
    예상 출력
    aab
    aac
    aba