텍스트 편집기
시간 제한1초메모리 제한150 MB
삽입, 삭제, 잘라내기, 붙여넣기, 실행 취소와 다시 실행을 지원하는 텍스트 편집기를 구현합니다.
문제
이 문제는 두 번 실행되는 문제입니다. 각 테스트에서 제출한 풀이가 두 번 실행됩니다. 자세한 내용은 문제 설명의 나머지 부분과 입력 형식 절을 참고하세요.
문자 값이 이상 이하인 문자열을 다루는 간단한 텍스트 편집기를 구현하는 것이 과제입니다. 문자열의 길이는 언제나 이하가 보장됩니다. 명령의 모든 인자는 부터 시작하는 인덱스이고, 모든 구간은 반개구간입니다. 즉 은 포함되고 은 포함되지 않습니다. 모든 구간은 비어 있지 않으며, 모든 위치와 구간은 범위 안에 있습니다. 클립보드는 처음에 비어 있습니다.
insert: 파일의 번째 위치에 문자열 을 삽입합니다. 모든 의 길이 합은 이하입니다.erase: 파일의 번째 문자부터 번째 문자까지의 내용을 지웁니다.print: 파일의 번째 문자부터 번째 문자까지의 내용을 출력합니다. 모든print명령의 출력 길이 합은 을 넘지 않습니다.copy: 파일의 번째 문자부터 번째 문자까지의 내용을 클립보드에 복사합니다.cut: 파일의 번째 문자부터 번째 문자까지의 내용을 클립보드로 잘라냅니다.paste: 클립보드의 내용을 파일의 번째 위치에 삽입합니다. 빈 클립보드를 붙여넣는 일은 없습니다.serialize: 파일의 내용(클립보드 제외)을 출력합니다. 출력은 자를 넘을 수 없고, 이상 이하의 문자만 사용해야 합니다. 출력 문자열이 파일 내용과 정확히 같을 필요는 없지만,deserialize명령에 대응해 파일을 복원할 수 있어야 합니다. 최소 한 글자는 출력해야 합니다. 이 명령은 첫 번째 실행의 마지막 명령으로 한 번만 주어집니다.deserialize: 은serialize에 대해 출력된 문자열과 정확히 같습니다. 이 명령은 두 번째 실행의 첫 번째 명령으로 한 번만 주어집니다.undo: 파일 내용을 바꾼 마지막 명령(insert,erase,cut,paste,deserialize)의 변경을 되돌립니다. 클립보드 상태는 그대로 둡니다. 이전 버전이 없으면 아무 일도 하지 않습니다.redo: 아직 취소되지 않은 마지막undo를 다시 실행합니다. 다음 버전이 없으면 아무 일도 하지 않습니다. 대부분의 텍스트 편집기와 마찬가지로, 파일 내용을 바꾸는 명령은 그 뒤의 모든 다음 버전을 지웁니다.copy같은 다른 명령은 그렇지 않습니다.
입력
첫 줄에는 명령의 개수를 나타내는 정수 ()이 하나 주어집니다. 다음 개의 줄에 위에서 설명한 형식의 명령이 주어집니다. 두 실행의 입력 형식은 같습니다.
출력
print와 serialize 명령의 답을 각각 한 줄에 하나씩 출력합니다.