10627: Type Printer
Вам потрібно надрукувати \(N\)-слів на Movable Type Printer. Movable Type Printers – це старі принтери, для роботи яких потрібно ставити маленькі металеві шматочки (кожен із шматочків містить одну літеру) у певному порядку, утворюючи таким чином слова. Потім усі вони вдавлюються в аркуш паперу. Таким чином, друкується одне слово. Ваш принтер дозволяє виконувати такі операції:
- Додати літеру до кінця слова, що знаходиться зараз на принтері.
- Видалити останню літеру зі слова, яке зараз знаходиться на принтері. Цю операцію можна робити тільки якщо слово містить хоча б одну букву.
- Надрукувати слово, що знаходиться на принтері (при цьому слово нікуди не зникає, можна друкувати його ще раз).
- Спочатку принтер містить пусте слово. Наприкінці друку можна залишити непорожнє слово. Слова, які вам дано, ви можете друкувати у довільному порядку.
Кожна із трьох операцій займає одну одиницю часу. Вам потрібно знайти послідовність операцій, які друкують дані \(N\) слів за мінімальний час. Якщо мінімальних послідовностей кілька, виведіть будь-яку.
Формат вхідних даних
Ваша програма повинна обробити наступні вхідні дані:
У першому рядку число \(N\) (\(1 \le N \le 25000\)).
У наступних \(N\) рядках слова складаються з маленьких букв латинського алфавіту. Довжина кожного слова пом ізається у 20. Усі слова різні.
Формат вихідних даних
Ваша програма має вивести такі дані:
У першому рядку \(M\) – число операцій.
У наступних \(M\) рядках по одному символу - опис операцій. Кожна операція описується одним символом:
- Додавання символу позначається символом.
- Видалення символу позначається символом - (мінус, ASCII-код 45).
- Операція "надрукувати поточне слово" позначається символом "P" (велика латинська літера P).
Приклад вхідних даних-1
3
print
the
poem
Приклад вихідних даних-1
20
t
h
e
P
-
-
-
p
o
e
m
P
-
-
-
r
i
n
t
P
Коментарі