Макрос
(Время: 1 сек. Память: 16 Мб Сложность: 72%)
Однажды Бараш решил поучаствовать в литературном конкурсе программистов. Стихотворения принимались на четырех языках: Assembly, Foxy, Lispy, Prology. Как старый поэт-программист, Бараш признавал только Assembly. Поэтому писать пришлось на нем. Он запустил свой верный edit.com под Dos 6.22 и приступил к делу. Учитывая то, что Бараш был ленивым программистом, он вовсю использовал макросы. Это чрезвычайно ускоряло процесс стихосложения, так как у Бараша было множество заготовок, как и у любого старого поэта-программиста.
Стих получился шикарным, но, посовещавшись со своей подругой Нюшей, Бараш понял, что стих недоступен для понимания подавляющего большинства ценителей искусства. Поэтому Бараш решил пожертвовать формой произведения, дабы донести его высший смысл. Для этого он решил отказаться от использования макроопределений в своем произведении, выполнив макроподстановку.
Проблема в том, что одно стихотворное макроопределение могло содержать другие макроопределения. Также Бараш был большим любителем циклической макрогенерации, что не могло не отразиться в его произведениях. Ему не хватило душевных сил корежить произведение собственными руками, поэтому он попросил о помощи вас. Помогите Барашу!
Бараш использовал следующий формат макроопределений (вместо каждого символа ‘_’ во входном и выходном файлах будет стоять точно один пробел):
- Макроопределения:
#identificator_{}
Идентификатор (имя макроопределения) состоит не более, чем из 10 строчных английских букв. Не встречается макроопределений с именем “rep”.
- Макровызовы:
##identificator_
- Циклические макроопределения:
#rep_n_{}
n – целое число повторов текста (0 ≤ n ≤ 100).
Назовем блоком текст , заключенный между фигурными скобками. Bсе стихотворение также называется блоком.
В любом блоке могут встречаться другие макроопределения и макровызовы.
Макроопределение считается действующим для всего последующего текста текущего блока и всех последующих вложенных блоков, если только во вложенном блоке не переобъявлено макроопределение с таким же именем. Если во вложенных блоках встретились макроопределения с таким же именем, как и во внешнем блоке, тогда действующим считается макроопределение внутреннего блока. В блоке не может встретиться двух одноименных макроопределений.
Рекурсивные вызовы отсутствуют. Вызовы несуществующих макроопределений игнорируются. Все макровызовы, которые в тексте стихотворения стоят ранее макроопределения, считаются несуществующими и, следовательно, игнорируются.
Входные данные
Входной файл INPUT.TXT содержит число N - количество строк в стихотворении. Далее идет N строк стихотворения. Общий объем входных данных не превышает 1024 байт.
Выходные данные
В выходной файл OUTPUT.TXT выведите исправленный текст стихотворения.
Примеры
№ | INPUT.TXT | OUTPUT.TXT |
1 | 5
##a_
#a_{a}##a_
#b_{##a__#a_{b}##a_#c_{##a_}_##c_}
##b_##c_
##a_ |
a
a_b_b
a
|
2 | 4
#a_{#b_{#c_{a}##c_}##b_}##a_
#e_{#b_{#c_{b}##c_}##b_}##e_
#f_{#b_{#c_{c}##c_}##b_}##f_
##a_##e_##f_##b_##c_ | a
b
c
abc |
Примечание
В примерах символы пробелов во входных и выходных данных обозначены символом "_" (подчеркивание).
Для отправки решения задачи необходимо зарегистрироваться и авторизоваться!
|