Задачі
Рекурсія
Рекурсія
\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
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