eolymp
bolt
Try our new interface for solving problems
Problems

Рекурсия

Рекурсия

\textit{Рекурсия. сущ. муж. см. рекурсия.} \textit{Фольклор} Петя разрабатывает новую среду разработки для языка \textbf{Ж±}. Сейчас он пишет модуль, который будет отслеживать потенциальную бесконечную рекурсию. \textbf{Ж±} - процедурный язык. Все переменный в \textbf{Ж±} являются двоичными, каждая переменная может принимать два значения: "\textbf{0}" и "\textbf{1}". Каждая процедура имеет несколько аргументов. В \textbf{Ж±} есть следующие операторы: \begin{itemize} \item увеличить значение на один "\textbf{x++}" - если \textbf{x} равен \textbf{0}, он становится равным \textbf{1}; \item уменьшить значение на один "\textbf{x--}" - если \textbf{x} равен \textbf{1}, он становится равным \textbf{0}; \item условный оператор "\textbf{if (x) S1 else S2}" где \textbf{S1} и \textbf{S2} - произвольные операторы, выполнить \textbf{S1}, если \textbf{x} равен 1, или \textbf{S2}, если \textbf{x} равен \textbf{0}; \item вызов процедуры "\textbf{f (x, y)}"; \item составной оператор "\textbf{\{S1 S2 ...\}}", где \textbf{S1}, \textbf{S2}, и т.д. - произвольные операторы: выполнить \textbf{S1}, \textbf{S2}, и т.д. в этом порядке. \end{itemize} Описание процедуры выглядит так: "\textbf{<имя процедуры> (<список аргументов>) S}" где \textbf{S} - произвольный оператор. Все аргументы передаются по значению (то есть изменения внутри процедуры не меняют значений соответствующих переменных в вызывающей процедуре). Например, программа в первом примере содержит процедуру "\textbf{inc}", которая получает трех-битное значение в виде трёх аргументов \textbf{x2}, \textbf{x1} и \textbf{x0} и рано или поздно вызывает процедуру "\textbf{done}" с тремя аргументами, которые задают значение, увеличенное на единицу. По заданной программе выясните, можно ли так вызвать некоторую процедуру с такими аргументами, чтобы результатом вызова стала бесконечная рекурсия. \InputFile Входной файл содержит программу на языке \textbf{Ж±}. Она содержит не более \textbf{20} процедур, каждая процедура имеет не более 15 аргументов. Размер входного файла не превышает \textbf{1000} байт. Имена процедур и аргументов состоят из букв и цифр и являются зависимыми от регистра. Все имена не длиннее \textbf{40} символов. Никакая процедура не называется "\textbf{if}" или "\textbf{else}". \OutputFile Выведите "\textbf{YES}", если можно вызвать некоторую процедуру с такими аргументами, что в результате получится бесконечная рекурсия, или "\textbf{NO}", если нет.
Time limit 1 second
Memory limit 64 MiB
Input example #1
inc(x2, x1, x0) {
  if (x0) {
    x0--
    inc1(x2, x1, x0)
  } else {
    x0++
    done(x2, x1, x0)
  }
}
 
inc1(x2, x1, x0) {
  if (x1) {
    x1--
    inc2(x2, x1, x0)
  } else {
    x1++
    done(x2, x1, x0)
  }
}
 
inc2(x2, x1, x0) {
  if (x2) {
    x2--
    done(x2, x1, x0)
  } else {
    x2++
    done(x2, x1, x0)
   }
}
 
done(x2, x1, x0) {
}
Output example #1
NO