eolymp
bolt
Спробуйте наш новий інтерфейс для відправки розв'язків
Задачі

Рекурсія

Рекурсія

\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}", якщо ні.
Ліміт часу 1 секунда
Ліміт використання пам'яті 64 MiB
Вхідні дані #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) {
}
Вихідні дані #1
NO