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