Ти дивишся на проспект, а хтось покинув сміття! Потрібно написати програму, яка допоможе виправити проблему, помістивши сміття в кошики для сміття.
Завдання
Проспект складається з рядка символів для друку ASCII, наприклад:
[[](dust)[]] car ((paper)vomit) (broken(glass)) [[] (rotten) fence (dirty)
Деякі з дужок тут не мають собі рівних; це просто приманки. Що нас хвилює - це відповідні набори дужок.
Сміттєвий бак представляє собою рядок , починаючи з [
і закінчуючи ]
, і внутрішньо узгоджених дужок і дужок. Наприклад, []
і [[](dust)[]]
є кошики для сміття у наведеному вище рядку.
Мішок для сміття є рядком , починаючи з (
і закінчуючи )
, і внутрішньо узгоджені дужками і дужками. Наприклад, (dust)
чи є мішок для сміття у наведеній вище рядку.
Можливо, деякі сумки для сміття вже є у сміттєвих кошиках. Однак принаймні один залишився, і нам потрібно перемістити мішки для сміття, щоб вони були всередині сміттєвих баків. Зокрема, для кожного мішка для сміття, який наразі не знаходиться у кошику для сміття (тобто підрядка цього сміттєвого кошика), нам потрібно видалити його з поточного місця в рядку та вставити його в місце, яке знаходиться всередині сміттєвого бака .
Тут є додаткове правило. Оскільки ми не хочемо витрачати занадто багато грошей на сміттєзбірники, а їх маршрут веде їх по проспекту справа наліво, ми хочемо перемістити кожен мішок з сміттям вліво (найважливіший критерій, якщо припустити, що ми повинні перенести його на все) і найкоротшу можливу відстань (доки вона рухається ліворуч). Так, наприклад, єдиний правильний вихід для
[can1](bag)[can2]
є
[can1(bag)][can2]
(переміщення сумки лише на один символ вліво). Крім того, сумки повинні залишатися в тому ж відносному порядку:
[can](bag1)(bag2)
має стати
[can(bag1)(bag2)]
(тобто ви не можете поставити (bag2)
ліворуч від (bag1)
.)
Роз'яснення
- Зліва від крайнього лівого смітника не буде жодних мішків для сміття; завжди можна буде виправити все сміття, перемістивши його вліво.
- Завжди буде хоч один мішок для переміщення. Можливо, їх буде більше.
- Всередині мішка для сміття ніколи не буде сміття (банки занадто цінні, щоб їх просто викинути).
- Якщо пакетик вже знаходиться в банці, просто залиште його в спокої.
- Гаразд, щоб вхід і вихід відрізнялися у пробілі пробілу (включаючи нові рядки).
Приклади:
Вхід:
[[](dust)[]] car ((paper)vomit) (broken(glass)) [[] (rotten) fence (dirty)
Вихід:
[[](dust)[]((paper)vomit)(broken(glass))] car [[(rotten)(dirty)] fence
Вхід:
[]] (unusable) door (filthy) car
Вихід:
[(unusable)(filthy)]] door car