Задача D. Рекурсия

Автор:Методическая комиссия по информатике   Ограничение времени:2 сек
Входной файл:input.txt   Ограничение памяти:256 Мб
Выходной файл:output.txt  
Максимальный балл:100  

Условие

"Чтобы понять рекурсию, надо понять рекурсию"

Фольклор

Одним из важных понятий, используемых в теории алгоритмов, является рекурсия.

Неформально ее можно определить как использование в описании объекта самого себя. Если речь идет о процедуре, то в процессе исполнении эта процедура напрямую или косвенно (через другие процедуры) вызывает сама себя.

Рекурсия является очень "мощным" методом построения алгоритмов, но таит в себе некоторые опасности. Например, неаккуратно написанная рекурсивная процедура может войти в бесконечную рекурсию, то есть, никогда не закончить свое выполнение (на самом деле, выполнение закончится с переполнением стека).

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

Рассмотрим программу, состоящую из n процедур P1, P2, ..., Pn. Пусть для каждой процедуры известны процедуры, которые она может вызывать. Процедура P называется потенциально рекурсивной, если существует такая последовательность процедур Q0, Q1, ..., Qk, что Q0 = Qk = P и для i = 1… k − 1 процедура Qi − 1 может вызвать процедуру Qi. В этом случае задача будет заключаться в определении для каждой из заданных процедур, является ли она потенциально рекурсивной.

Требуется написать программу, которая позволит решить названную задачу.

Формат входного файла

Первая строка входного файла содержит целое число n - количество процедур в программе.

Далее следуют n блоков, описывающих процедуры. Блоки отделены друг от друга и от первой строки входного файла строками, каждая из которых содержит по 5 символов "*" (ASCII 42).

Описание процедуры начинается со строки, содержащий ее идентификатор. Далее идет строка, содержащая число k - количество процедур, которые могут быть вызваны описываемой процедурой. Последующие k строк содержат идентификаторы этих процедур — по одному идентификатору на строке.

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

Формат выходного файла

Для каждой процедуры, присутствующей во входном файле, необходимо вывести слово YES, если она является потенциально рекурсивной, и слово NO — в противном случае.

Следуйте формату вывода, приведенному в примере. Процедуры в выходном файле должны быть выведены в том же порядке, в каком они перечислены во входном файле.

Ограничения

1 ≤ n ≤ 100

Идентификатор процедуры состоит только из маленьких букв латинского алфавита и цифр. Также идентификатор не пуст, и его длина не превосходит 100 символов.

k ≤ n

Примеры тестов

Входной файл (input.txt) Выходной файл (output.txt)
1
3
p1
2
p1
p2
*****
p2
1 
p1
*****
p3
1
p1
p1: YES
p2: YES
p3: NO

0.169s 0.007s 13