І знову ви витратили дні на рефакторинг коду, який ніколи не запускається. Досить — ваш час краще витратити на створення інструменту, що знаходить невикористовуваний код!
Ваше програмне забезпечення поділено на пакети та виконувані файли. Пакет — це набір методів. Виконувані файли — це пакети, що містять серед інших методів лише один метод з іменем PROGRAM. Цей метод виконується при запуску відповідного виконуваного файлу. Звичайні пакети не мають методу з іменем PROGRAM.
Кожен метод унікально ідентифікується комбінацією імені пакета та методу. Наприклад, метод з ідентифікатором SuperGame::PROGRAM буде основним методом виконуваного файлу SuperGame.
Для кожного методу в програмному забезпеченні вам надається список методів, що безпосередньо викликають його. Таким чином, ви можете легко ідентифікувати методи, які ніколи не викликаються з будь-якого методу. Однак ваше завдання складніше: необхідно знайти невикористовувані методи. Це методи, які ніколи не досягаються потоком управління будь-якого виконуваного файлу у вашому програмному забезпеченні.
Перший рядок містить ціле число (1 \le n \le 400) — кількість методів у програмному забезпеченні.
Кожен метод описується двома рядками, всього в 2 \cdot n рядках. Перший рядок складається з унікального ідентифікатора методу та k_i (0 \le k_i \le n) — кількості методів, що безпосередньо викликають цей метод. Другий рядок складається з набору ідентифікаторів k_i цих викликаючих методів або є порожнім, якщо таких методів немає, тобто k_i = 0.
Ідентифікатори методу складаються з імені пакета, за яким слідують дві двокрапки та ім'я методу, наприклад Packagename::Methodname. Обидва рядки, пакет та ім'я методу містять до малих, великих літер або цифр (a-z, A-Z, 0-9).
У вхідних даних буде вказано рівно різних ідентифікаторів методів.
Рядок, що містить кількість невикористовуваних методів у вашому програмному забезпеченні.
Приклад 1
Приклад 2