Спектр
Swamp County Consulting нещодавно отримала контракт від загадкового урядового агентства на створення бази даних для розслідування зв'язків між тим, що вони називають "цілями". Ваша команда була залучена як субпідрядник для реалізації системи, яка зберігає інформацію про цілі та обробляє команди, наведені нижче.
Ціль представлена рядком до 32 друкованих символів без вбудованих пробілів. Зв'язок - це двостороннє відношення між двома цілями. Кількість переходів між даною ціллю (названою "ціль1") та іншими цілями визначається за такими правилами:
Цілі, безпосередньо пов'язані з ціллю1, знаходяться на відстані 0 переходів.
Цілі, безпосередньо пов'язані з цільми на відстані 0 переходів, і які ще не враховані як цілі на відстані 0 переходів або як оригінальна ціль, є цілями на відстані 1 переходу.
Аналогічно, цілі, безпосередньо пов'язані з цільми на відстані n переходів, і які ще не враховані в цілях на відстані 0..n переходів, є цілями на відстані n+1 переходів.
Не буде більше ніж 100000 цілей і не більше ніж 500000 зв'язків.
Команди
Система бази даних має лише три команди: add, associated, і connections. Цілі та зв'язки ніколи не видаляються, оскільки Агентство ніколи не забуває і не робить помилок. Команди починаються з першого стовпця рядка. Команди та їх параметри розділяються пробілами. Жоден вхідний рядок не перевищуватиме 80 стовпців. На вихідному рядку не повинно бути початкових або кінцевих пробілів.
add приймає один або два параметри:
add target1 //один параметр
Функція: Додає ціль до бази даних без зв'язків.
Примітка: Якщо ціль вже є в базі даних, нічого не робити (це не помилка)
add target1 target2 //два параметри
Функція: Створює двосторонній зв'язок між цілями.
Якщо будь-яка з цілей ще не в базі даних, додати її/їх і створити зв'язок.
Якщо вже існує зв'язок між цілями, нічого не робити (це не помилка)
Якщо target1 і target2 однакові, розглядати це так, ніби команда була "add target1" (це не помилка). Може бути не більше одного прямого зв'язку між цілями.
connections target1
Функція: Повертає кількість переходів до прямих та непрямих зв'язків від цілі.
Надрукувати кількість переходів, двокрапку, один пробіл і кількість цілей з такою кількістю переходів без початкових нулів на окремому рядку для кожної кількості переходів. Почати з кількості переходів 0 і закінчити кількістю переходів для останньої ненульової кількості цілей. Не друкувати кінцеві пробіли.
Якщо ціль не має зв'язків, надрукувати рядок, що містить лише рядок "no connections".
Якщо ціль не в базі даних, надрукувати рядок, що містить лише рядок "target does not exist" (без крапки).
associated target1 target2
Функція: Повертає інформацію про існування зв'язку між двома цілями
Якщо існує шлях між цілями, надрукувати "yes: n" на окремому рядку, де n - це кількість переходів цілі target2 відносно цілі target1. Є один пробіл після двокрапки і немає початкових нулів і кінцевих пробілів.
Якщо немає зв'язку між цілями, надрукувати "no" на окремому рядку.
Якщо будь-яка з цілей target1 або target2 не в базі даних, надрукувати рядок, що містить лише рядок "target does not exist".
Вхідні дані
Щоб дозволити кілька тестових випадків у вхідному файлі, ми додаємо команду "reset", яка не є командою бази даних і з'являється між командами бази даних для різних випадків у вхідному файлі. Обов'язково скидайте всі ваші структури даних, коли читаєте цю команду. Обробляйте до кінця файлу; немає прапора кінця даних і немає команди "reset" в кінці файлу.
Вихідні дані
Починайте кожен випадок з рядка, що складається з "Case", одного пробілу, номера випадку та двокрапки. Закінчуйте кожен випадок рядком з десяти мінусів.