Для любого достаточно мощного оружия и лабораторий, его обслуживающих, требуется программное обеспечение. Поскольку в эру Оппенгеймера компьютеры только зарождались, это утверждение еще не было правдой. Но это не означает, что программирования тогда вообще не существовало — любой повседневный алгоритм можно представить в виде псевдокода.
В лаборатории Оппенгеймера на стене висел псевдокод, выводящий какие-то характеристики ядерной бомбы. Псевдокод устроен довольно просто: он состоит только из блоков, которые мы будем обозначать как <block>, и работает только с целыми числами, поэтому Оппенгеймер при необходимости запускает его у себя в уме.
В этом псевдокоде:
Такой цикл проходит переменной <var> по всем значениям от <value1> до <value2> включительно, и для каждой выполняет указанную в своем теле последовательность блоков. Переменная <var> при этом может использоваться только внутри этого цикла и только с правой части от знака '='.
for <var> = <value1>...<value2> {
<block>
<block>
...
}
Для этого псевдокода верно следующее:
Вы — молодой лаборант, не разбирающийся в программировании (действительно, его пока почти что нет). Основные проблемы в понимании у вас вызывают вложенные циклы. Вы не понимаете вложенность, поэтому хотите перевести этот псевдокод на другой язык, чтобы иметь возможность помогать Роберту Оппенгеймеру в работе.
Другой язык поддерживает все те же примитивные операции (ввод, вывод и присвоение значений в переменную), и также имеет глобальную область видимости переменных, но в нем абсолютно нет скобок и возможности делать вложенные циклы. Вместо этого:
А также в языке есть две специальные команды:
Переведите код из обычного псевдокода в более понятный вам, без вложенностей. И кто знает, может быть именно вы под руководством Роберта Оппенгеймера совершите очередной прорыв в ядерной физике!
В первой строке ввода дано целое число $$$n$$$ — количество строк в псевдокоде ($$$1 \le n \le 1000$$$). Следующие $$$n$$$ строк содержат сам псевдокод.
Псевдокод строго отформатирован согласно грамматике из условия, включая пробелы и отступы. Изначально отступ равен $$$0$$$. Каждый следующий вложенный цикл имеет отступ на $$$4$$$ пробела больше, чем предыдущий. Каждый цикл содержит символ '{' в конце строки с объявлением и заканчивается строкой, содержащей только символ '}' на нужном отступе.
Имена переменных — строки из маленьких латинских букв от 'a' до 'z' и цифр от '0' до '9' длины от $$$1$$$ до $$$10$$$. Имя переменной не может быть равно «for», «print» или «read» и не может начинаться с цифры. Все целочисленные константы неотрицательны и не превосходят $$$2000$$$.
Если левая граница цикла больше правой, цикл совершает $$$0$$$ итераций.
Гарантируется, что псевдокод не обращается к переменным, в которые до этого не было записано значение. Также гарантируется, что все используемые в объявлении цикла переменные имеют уникальные имена, не совпадающие с встречавшимися ранее переменными, используются только внутри соответствующего цикла, и не находятся слева от знака '=' или в аргументе операции read. Никакая переменная в исходном псевдокоде не начинается на букву 'x'.
В первой строке выведите целое число $$$m \le 5 \cdot n$$$ — количество строк в вашем переведенном коде. В следующих $$$m$$$ строках выведите код в анти-вложенном псевдокоде в формате, описанном в условии.
Ваш код должен в точности повторять алгоритм, описанный псевдокодом из входных данных. Не обязательно добиваться того, чтобы все переменные имели те же имена и итоговые значения — достаточно, чтобы программы выводили одно и то же при условии одинакового ввода.
Все имена переменных в вашем коде должны состоять также из маленьких латинских букв и иметь длину от $$$1$$$ до $$$10$$$. Целочисленные константы в вашем коде должны быть неотрицательными и не превосходить $$$10000$$$.
6
n = 1
read(k)
for i = 0...k {
n = n + k
}
print(n)
9
n GETS 1
READ k
MACRO increase:
n GETS n + k
iters GETS k + 1
REPEAT increase iters
PRINT n
14
read(somevalue)
read(morevalue)
for i = 0...10 {
for j = 1...somevalue {
print(j)
}
smthidk = i
wut = 42
for k = 1...morevalue {
smthidk = smthidk + k
wut = smthidk + smthidk
}
print(wut)
}
23
MACRO printer:
PRINT j
j GETS j + 1
MACRO summator:
smthidk GETS smthidk + k
wut GETS smthidk + smthidk
k GETS k + 1
MACRO outer:
j GETS 1
REPEAT printer somevalue
smthidk GETS i
k GETS 1
wut GETS 42
REPEAT summator morevalue
PRINT wut
i GETS i + 1
READ somevalue
READ morevalue
i GETS 0
REPEAT outer 11