Олимпиадный тренинг

Задача . Cow Evolution


Задача

Темы:
Наступил 3019 год, и за прошедшие 1000 лет произошла удивительная эволюция коров.

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

Листья на дне дерева указывают все образовавшиеся под-популяции коров в 3019 году. Никакие листья (под-популяции) не содержат идентичные множества качеств. На рисунке под-популяция #1 не имеет никаких привнесённых качеств, а под-популяция #3 содержит качества "telepathic flying". Под-популяция #2 содержит качество "flying".

Эволюционное дерево такое, как изображено на рисунке, называется "правильным", если каждое новое качество появляется ровно на одном ребре дерева (то есть такая эволюция состоялась только в одной точке истории). Например, дерево будет неправильным, если качество "spots" возникнет в двух отдельных ветках. По заданному описанию под-популяций, определите, может ли оно быть описано "правильным" деревом.

ФОРМАТ ВВОДА (файл evolution.in):

Первая строка ввода содержит количество под-популяций, \(N\) (\(2 \leq N \leq 25\)). Каждая из последующих \(N\) строк описывает одну под-популяцию. Эта строка начинается с целого числа \(K\) (\(0 \leq K \leq 25\)), за которым следуют \(K\) характеристик всех коров этой популяции. Характеристики - это строки, содержащие до 20 маленьких латинских символов (a..z). Никакие из под-популяций не содержат в точности одни и те же характеристики.

ФОРМАТ ВЫВОДА (файл evolution.out):

Выведите "yes" если возможно сформировать правильное эволюционное дерево и "No" в противном случае.


Примеры
Входные данныеВыходные данные
1 4
2 spots firebreathing
0
1 flying
2 telepathic flying
yes

time 500 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
Комментарий учителя