문제
N * M 크기의 소문자로 이루어진 메모장이 있다.
초기에 특정 문자열이 채워져 있으며 cursor는 첫 번째 줄 맨 왼쪽에 존재한다.
메모장의 좌표는 (0,0) ~ (N-1, M-1) 로 표현 된다..
아래 세가지 명령을 수행해나간다.
1. insert ch : 10,000회
ch 문자를 cursor위치에 삽입한다. (ch는 소문자)
해당 열이 꽉 차서 범위를 벗어나면 벗어난 문자는 다음 줄의 첫 번째로 미뤄진다.
다음 줄도 범위를 벗어나면 동일하게 처리하며 끝 줄까지 수행한다.
삽입 후 cursor는 ch의 오른쪽에 위치한다.
메모장의 범위를 벗어나는 경우는 존재하지 않는다.
2. erase : 10,000회
cursor의 왼쪽 문자를 삭제한다.
오른쪽 문자들이 전부 왼쪽으로 한자리 이동한다.
다음줄이 존재하면 첫번째 열의 문자를 이전 줄의 마지막 열으로 이동하며 당기는 작업을 마지막 줄까지 반복한다.
만약 cursor의 왼쪽에 문자가 존재하지 않으면 무시한다.
3. move x y : 100,000회
(x,y)는 x행 y열을 의미한다.
cursor를 (x,y) 위치 왼쪽으로 이동하고 (x,y) 문자를 출력한다. (x,y는 음이 아닌 정수)
만약, 범위를 벗어났으면 맨 마지막 문자의 오른쪽에 커서가 위치하고 '*'을 출력한다.
입력
첫째 줄에 메모장 크기 N, M 와 쿼리 수 Q가 주어진다.
둘째 줄에 초기 메모장 문자열이 주어진다.
1행 1열부터 순서대로 저장되고 열을 벗어나면 다음행으로 넘어가 저장된다.
셋째 줄부터 Q개 줄에 걸쳐 명령이 주어진다.
각 명령은 문제에 주어진 횟수보다 많이 주어지지 않는다.
N, M : 5 ~ 1,000
Q : 1 ~ 120,000
출력
move 명령에 대한 결과를 명령마다 한 줄에 출력한다.
예제
5 5 9
abcdeabcde
insert x
insert y
insert z
move 1 3
erase
erase
erase
move 2 3
move 0 2
a
*
z