Для любого достаточно мощного оружия и лабораторий, его обслуживающих, требуется программное обеспечение. Поскольку в эру Оппенгеймера компьютеры только зарождались, это утверждение еще не было правдой. Но это не означает, что программирования тогда вообще не существовало — любой повседневный алгоритм можно представить в виде псевдокода.
В лаборатории Оппенгеймера на стене висел псевдокод, выводящий какие-то характеристики ядерной бомбы. Псевдокод устроен довольно просто: он состоит только из блоков, которые мы будем обозначать как <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