Олимпиадный тренинг

Задача . 17. Черновик с Undo/Redo — повышенный уровень


Задача

Темы:

Черновик состоит из последовательности строк и изначально пуст. Для простоты каждая строка содержит одно слово без пробелов. APPEND добавляет строку в конец. UNDO отменяет последнее неотменённое добавление. REDO возвращает последнее отменённое добавление. Новая команда APPEND после отмены полностью очищает возможность повторения старых отменённых добавлений.

Команды

КомандаДействие и ответ
APPEND wordДобавить строку, очистить историю REDO: OK.
UNDOОтменить добавление: OK; если нечего отменять: EMPTY.
REDOПовторить отменённое добавление: OK; если нечего повторять: EMPTY.
PRINTВывести слова черновика или EMPTY.
COUNTВывести число строк в черновике.

Входные данные

Первая строка содержит q. Далее идут q команд, по одной в строке. Одинаковые слова могут встречаться в разных строках.

Выходные данные

Для каждой команды выведите ответ из таблицы. PRINT выводит слова черновика в порядке строк через один пробел. Неуспешные UNDO и REDO, а также PRINT и COUNT, не меняют ни черновик, ни историю.

Не выводите приглашения к вводу и пояснения. Служебные слова в ответах пишите в указанном регистре.

Ограничения

1 ≤ q ≤ 100000; слово содержит 1–20 строчных латинских букв. Суммарное количество слов во всех ответах PRINT не превышает 200000.


Примеры
№Входные данныеВыходные данные
1
10
APPEND alpha
APPEND beta
UNDO
PRINT
REDO
PRINT
UNDO
APPEND gamma
REDO
PRINT
OK
OK
OK
alpha
OK
alpha beta
OK
OK
EMPTY
alpha gamma
2
8
UNDO
REDO
APPEND x
UNDO
COUNT
REDO
PRINT
COUNT
EMPTY
EMPTY
OK
OK
0
OK
x
1
Статистика успешных решений по компиляторам
Комментарий учителя