만드는 중입니다

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

찾아 바꾸기

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

요약
"a"에서 시작해 문자를 문자열로 바꾸는 치환을 여러 번 적용한 뒤, 최종 문자열의 l번째부터 r번째까지 부분 문자열을 구합니다.
난이도

보통10점 중 6점

유형
재귀, 동적 계획법, 문자열
정답자
아직 제출이 없습니다

문제

Bessie는 최신 텍스트 편집 프로그램 miV를 쓰고 있다. 이 프로그램의 찾아 바꾸기 기능으로 소문자 영어 알파벳 cc가 나타나는 곳을 모두 찾아, 각각을 비어 있지 않은 소문자 문자열 ss로 바꿀 수 있다. 예를 들어 문자열 "ball"에서 cc를 'l', ss를 "na"로 고르면 문자열은 "banana"가 된다.

Bessie는 문자열 "a"에서 시작해 이 연산을 여러 번 적용하여 최종 문자열 SS를 얻는다. SS는 매우 길 수 있으므로, 주어진 ll과 rr (1≤l≤r≤min⁡(∣S∣,1018)1\le l\le r\le \min(|S|,10^{18}))에 대해 ll번째 문자부터 rr번째 문자까지의 부분 문자열 Sl…rS_{l\dots r}을 구하려 한다.

모든 연산에서 ∣s∣|s|의 합은 2⋅1052\cdot 10^5 이하이며, r−l+1≤2⋅105r-l+1\le 2\cdot 10^5이다.

입력

첫 줄에 ll, rr, 연산의 개수가 주어진다. 이어지는 각 줄에는 연산 하나를 나타내는 cc와 ss가 주어진다. 모든 문자는 'a'부터 'z'까지의 소문자 영어 알파벳이다.

출력

부분 문자열 Sl…rS_{l\dots r}을 한 줄에 출력한다.

힌트

문자열은 다음과 같이 바뀐다.

a →\rightarrow ab →\rightarrow bcb →\rightarrow bdeb →\rightarrow bbbdebbb

예제1

  1. 예제 1

    입력
    3 8 4
    a ab
    a bc
    c de
    b bbb
    
    예상 출력
    bdebbb