Ви воюєте з розгалуженою мережею ворожих шпигунів . Ви знаєте, що кожен шпигун має принаймні одну (іноді множину) фальшивих посвідчень, якими він любить користуватися. Ви дуже хотіли б дізнатися, з якими шпигунами ви насправді маєте справу.
На щастя, ваші контррозвідувальні агенти виконують свою роботу і іноді можуть з’ясувати, коли два фальшиві посвідчення фактично контролюються тим самим ворожим шпигуном.
Тобто:
- Однак ваші агенти не завжди знають, коли два фальшиві ідентифікатори мають одного шпигуна за ними
- Якщо агент повідомляє вам, що двоє підроблених ідентичностей контролюються тим самим шпигуном, ви довіряєте, що вони праві.
Повідомлення агента
Агенти надсилають вам криптовалютні повідомлення, в яких повідомляють, які особи мають одного шпигуна за ними. Приклад:
У вас є два агенти та 5 підроблених ідентичностей для вирішення.
Перший агент надсилає вам повідомлення:
Red Red Blue Orange Orange
Це означає, що вони думають, що є три шпигуни:
- перший (червоний) керує особами 1 і 2
- другий (Blue) керує ідентичністю 3
- третій (помаранчевий) керує особами 4 та 5
Другий агент надсилає вам повідомлення:
cat dog dog bird fly
Це означає, що вони думають, що є 4 шпигуни:
- перший (кіт) контролює особу 1
- другий (собака) керує особами 2 і 3
- третій (птах) контролює особистість 4
- четвертий (муха) контролює особу 5
Складаючи дані, ми бачимо:
Identities: id1 id2 id3 id4 id5
Agent 1: |--same-spy--| |--same-spy--|
Agent 2: |--same-spy--|
Conclusion: |-----same-spy------||--same-spy--|
Це означає, що є максимум 2 шпигуни .
Примітки
Особи, які належать одному шпигуну, не повинні бути послідовними, тобто повідомлення типу:
dog cat dog
є дійсним.
Крім того, те саме слово можуть використовуватися двома різними агентами - це нічого не означає, це просто збіг, наприклад:
Agent 1: Steam Water Ice
Agent 2: Ice Ice Baby
Лід використовується обома агентами - Ice
використовуваний перший агент не пов'язаний з двома випадками Ice
використання другого агента.
Виклик
Складіть усі дані своїх агентів і з’ясуйте, скільки насправді є ворожих шпигунів. (Якщо точніше, отримайте нижню верхню межу, враховуючи обмежену інформацію, яку ви маєте.)
Виграє найкоротший код у байтах.
Специфікація вводу та виводу
Вхід - це список з n рядків, які представляють n повідомлень від агентів. Кожен рядок складається з k токенів, розділених пробілом, однакового k для всіх рядків. Маркери буквено-цифрові, довільної довжини. Справа має значення.
Вихід повинен бути єдиним числом, що представляє кількість різних шпигунів, виходячи з інформації ваших агентів.
Приклади
Приклад 1
Вхід:
Angel Devil Angel Joker Thief Thief
Ra Ra Ras Pu Ti N
say sea c c see cee
Вихід:
2
Приклад 2
Вхід:
Blossom Bubbles Buttercup
Ed Edd Eddy
Вихід:
3
Приклад 3
Вхід:
Botswana Botswana Botswana
Left Middle Right
Вихід:
1
Приклад 4
Вхід:
Black White
White Black
Вихід:
2
Приклад 5
Вхід:
Foo Bar Foo
Foo Bar Bar
Вихід:
1
Приклад 6
Вхід:
A B C D
A A C D
A B C C
A B B D
Вихід:
1
Приклад 7
Вхід:
A B A C
Вихід:
3
Приклад 8
Вхід:
A
B
C
Вихід:
1
Приклад 9
Вхід:
X
Вихід:
1