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

Рекурсія

Рекурсія

Одним з важливих понять, які використовуються в теорії алгоритмів, є рекурсія. Неформально її можна визначити як використання в опису об'єкту самого себе. Якщо мова йде про процедуру, то в процесі виконання ця процедура напряму чи опосердковано (через інші процедури) викликає сама себе.

Рекурсія є дуже «потужним» методом побудови алгоритмів, але ховає у собі деякі небезпеки. Наприклад, неакуратно написана рекурсивна процедура може ввійти в нескінчену рекурсію, тобто ніколи не завершить своє виконання (насправді виконання завершиться з переповненням стеку).

Оскільки рекурсія може бути опосередкованою (процедура викликає сама себе через інші процедури), то задача визначення факту, чи є конкретна процедура рекурсивною, може бути достатньо складною.

Розглянемо програму, яка містить n процедур P1, P2, ..., Pn. Нехай для кожної процедури відомі процедури, які вона може викликати. Процедура P називається потенційно рекурсивною, якщо існує така послідовність процедур Q0, Q1, ..., Qk, що Q0 = Qk = P і для i = 1 ... k процедура Qi-1 може викликати процедуру Qi.

Потрібно написати програму, яка визначить для кожної з заданих процедур, чи є вона потенційно рекурсивною.

Вхідні дані

Перший рядок містить кількість процедур n (1n100) в програмі. Далі йде n блоків, які описують процедури. Блоки відокремлено один від одного рядками, кожен з яких містить по 5 символів "*" (зірочка).

Опис процедури починається з рядка, що містить її ідентифікатор, який складається лише з маленьких букв латинського алфавіту та цифр. Ідентифікатор може починатись як з букви, так і з цифри. Довжина ідентифікатора від 1 до 100 символів. Далі йде рядок, який містить число k (kn) - кількість процедур, які можуть бути викликані процедурою, шо описується. Наступні k рядків містять ідентифікатори цих процедур - по одному ідентифікатору у рядку.

Різні процедури мають різні ідентифікатори. При цьому жодна процедура не може викликати процедуру, яку не описано у вході.

Вихідні дані

Для кожної процедури, присутньої у вході, у порядку, в якому вони перераховані у вході, необхідно вивести в окремому рядку назву процедури, потім двокрапку, пропуск, потім слово YES, якщо процедура є потенційно рекурсивною, або слово NO у протилежному випадку.

Ліміт часу 1 секунда
Ліміт використання пам'яті 128 MiB
Вхідні дані #1
3
p1
2
p1
p2
*****
p2
1 
p1
*****
p3
1
p1
Вихідні дані #1
p1: YES
p2: YES
p3: NO
Джерело 2008 XIX шкільна обласна олімпіада з інформатики, Вологда, Задача B