Напишіть програму, яка містить (через stdin чи командний рядок) рядок із рекурсивною формою
PREFIX[SUFFIXES]
де
PREFIX
може бути будь-який рядок малих літер (az), включаючи порожній рядок, іSUFFIXES
може бути будь-яка послідовність рядків з рекурсивною формою,PREFIX[SUFFIXES]
з'єднаною разом, включаючи порожню послідовність.
Створіть із вхідного списку рядки з літери з малих літер, рекурсивно оцінивши список рядків у кожному із суфіксів та додавши їх до префікса. Виведіть для викреснення рядків у цьому списку в будь-якому порядку, по одному на рядок (плюс необов'язковий кінцевий новий рядок).
Приклад
Якщо вхід є
cat[s[up[][]][]ch[e[r[]s[]]]a[maran[]comb[]pult[[]ing[]]]]
то префікс
cat
і і суфіксиs[up[][]]
,[]
,ch[e[r[]s[]]]
, іa[maran[]comb[]pult[[]ing[]]]
. Кожен суфікс по черзі має свій префікс і суфікси.Результатом буде ці 9 слів у будь-якому порядку
catsup cats cat catcher catches catamaran catacomb catapult catapulting
тому що вхід кодує це дерево
і кожне з 9 вихідних слів може бути утворене шляхом обходу дерева від кореня до листа.
Примітки
Пам'ятайте, що префікс може бути порожнім рядком, тому щось подібне
[donut[][]cruller[]]
допустимий вхід, вихід якого буде (у будь-якому порядку)
donut cruller
де порожній рядок - порожній рядок, який відповідає другому суфіксу.
Послідовність суфікса також може бути порожньою, тому тривіальний вхідний випадок
[]
як вихід є один порожній рядок:
- Ви можете припустити, що введення видасть лише унікальні слова виводу.
- наприклад
hat[s[]ter[]s[]]
, буде недійсним введення, оскількиhats
кодується двічі. - Так само
[[][]]
недійсний, оскільки порожній рядок кодується двічі.
- наприклад
- Ви можете не припускати, що вхід є максимально коротким або стислим.
- наприклад,
'e'
вузол у головному прикладі вище може поєднуватися з'ch'
вузлом, але це не означає, що введення недійсне. - Аналогічно,
[[[[[]]]]]
є дійсним, незважаючи лише на кодування порожнього рядка на неоптимальний спосіб.
- наприклад,
- Замість програми ви можете написати функцію, яка приймає рядок введення як аргумент і друкує вихідний звичайно або повертає його як рядок або список.
Виграє найкоротший код у байтах.