Напишіть програму, яка містить (через 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'вузлом, але це не означає, що введення недійсне. - Аналогічно,
[[[[[]]]]]є дійсним, незважаючи лише на кодування порожнього рядка на неоптимальний спосіб.
- наприклад,
- Замість програми ви можете написати функцію, яка приймає рядок введення як аргумент і друкує вихідний звичайно або повертає його як рядок або список.
Виграє найкоротший код у байтах.
