Рекурсія
Одним з важливих понять, які використовуються в теорії алгоритмів, є рекурсія. Неформально її можна визначити як використання в опису об'єкту самого себе. Якщо мова йде про процедуру, то в процесі виконання ця процедура напряму чи опосердковано (через інші процедури) викликає сама себе.
Рекурсія є дуже «потужним» методом побудови алгоритмів, але ховає у собі деякі небезпеки. Наприклад, неакуратно написана рекурсивна процедура може ввійти в нескінчену рекурсію, тобто ніколи не завершить своє виконання (насправді виконання завершиться з переповненням стеку).
Оскільки рекурсія може бути опосередкованою (процедура викликає сама себе через інші процедури), то задача визначення факту, чи є конкретна процедура рекурсивною, може бути достатньо складною.
Розглянемо програму, яка містить n процедур P[1]
, P[2]
, ..., P[n]
. Нехай для кожної процедури відомі процедури, які вона може викликати. Процедура P називається потенційно рекурсивною, якщо існує така послідовність процедур Q[0]
, Q[1]
, ..., Q[k]
, що Q[0]
= Q[k]
= P і для i = 1 ... k процедура Q[i-1]
може викликати процедуру Q[i]
.
Потрібно написати програму, яка визначить для кожної з заданих процедур, чи є вона потенційно рекурсивною.
Вхідні дані
Перший рядок містить кількість процедур n (1 ≤ n ≤ 100) в програмі. Далі йде n блоків, які описують процедури. Блоки відокремлено один від одного рядками, кожен з яких містить по 5 символів "*" (зірочка).
Опис процедури починається з рядка, що містить її ідентифікатор, який складається лише з маленьких букв латинського алфавіту та цифр. Ідентифікатор може починатись як з букви, так і з цифри. Довжина ідентифікатора від 1 до 100 символів. Далі йде рядок, який містить число k (k ≤ n) - кількість процедур, які можуть бути викликані процедурою, шо описується. Наступні k рядків містять ідентифікатори цих процедур - по одному ідентифікатору у рядку.
Різні процедури мають різні ідентифікатори. При цьому жодна процедура не може викликати процедуру, яку не описано у вході.
Вихідні дані
Для кожної процедури, присутньої у вході, у порядку, в якому вони перераховані у вході, необхідно вивести в окремому рядку назву процедури, потім двокрапку, пропуск, потім слово YES, якщо процедура є потенційно рекурсивною, або слово NO у протилежному випадку.