만드는 중입니다

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

가장 무서운 이야기

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

요약
공백으로 나뉜 단어로 이루어진 이야기가 주어집니다. 문자 위치와 단어 위치를 서로 바꿔 답하고, 문자 삽입과 삭제를 처리합니다.
난이도

보통10점 중 7점

유형
문자열, 트리, 구현
정답자
아직 제출이 없습니다

문제

젊은 잭은 할로윈에 친구들을 겁주려고 가장 무서운 이야기를 쓰기로 했다.

이야기는 공백으로 구분된 단어가 하나 이상 이어진 것이다. 단어는 소문자 라틴 알파벳으로 이루어진 비어 있지 않은 문자열이다.

이야기의 품질은 단어뿐 아니라 단어를 이루는 문자에도 영향을 받는다.

잭은 nn개의 단어로 이루어진 이야기를 이미 만들었다. 이제 그는 이 이야기에 mm번의 연산을 하려고 한다. 각 연산은 이야기가 얼마나 무서운지 확인하거나 이야기를 조금 고치는 것이다. 연산은 네 종류다.

  • ?1 i: 이야기의 ii번째 문자가 몇 번째 단어의 몇 번째 위치에 있는지 구한다.
  • ?2 w p: ww번째 단어의 pp번째 문자가 이야기에서 몇 번째 위치에 있는지 구한다.
  • + i c: 이야기의 ii번째 위치에 문자 cc(소문자 또는 공백을 나타내는 \_)를 삽입한다.
  • - i: 이야기의 ii번째 문자를 삭제한다.

입력

첫 줄에 두 정수 nn과 mm이 공백으로 구분되어 주어진다(1⩽n,m⩽2⋅1051 \leqslant n, m \leqslant 2 \cdot 10^5).

둘째 줄에 잭의 이야기가 주어진다. 이야기는 공백으로 구분된 nn개의 단어로 이루어지며, 모든 단어 길이의 합은 10510^5 이하다.

다음 mm개의 줄에 각 연산이 주어진다.

  • ?1 i: 1⩽i⩽L1 \leqslant i \leqslant L. 여기서 LL은 현재 이야기의 길이다.
  • ?2 w p: 1⩽w⩽W1 \leqslant w \leqslant W, 1⩽p⩽P1 \leqslant p \leqslant P. 여기서 WW는 현재 단어 수, PP는 ww번째 단어의 길이다.
  • + i c: 1⩽i⩽L1 \leqslant i \leqslant L. cc는 소문자 또는 공백(\_)이다.
  • - i: 1⩽i⩽L1 \leqslant i \leqslant L.

어느 시점에도 이야기에 공백이 연속으로 나오거나 공백으로 시작하지 않는다. 첫 번째 종류 질의의 문자는 항상 공백이 아닌 글자다.

출력

첫 번째 종류 질의마다 단어 번호와 단어 안의 위치를 공백으로 구분해 한 줄에 출력한다.

두 번째 종류 질의마다 이야기에서의 위치를 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    3 16
    hell spirits fear
    ?1 1
    ?2 3 1
    + 12 _
    ?2 3 1
    + 13 i
    ?1 13
    ?1 14
    ?1 16
    ?1 7
    - 5
    ?1 7
    ?2 1 8
    - 1
    - 1
    ?2 2 1
    ?2 3 2
    
    예상 출력
    1 1
    14
    13
    3 1
    3 2
    4 1
    2 2
    1 7
    8
    10
    14