Вы сражаетесь с обширной сетью вражеских шпионов . Вы знаете, что у каждого шпиона есть хотя бы одна (иногда множественная) фальшивая личность, которую они любят использовать. Вам бы очень хотелось узнать, сколько шпионов вы имеете дело с.
К счастью, ваши агенты контрразведки выполняют свою работу и иногда могут выяснить, когда две поддельные личности фактически контролируются одним и тем же вражеским шпионом.
То есть:
- Ваши агенты не всегда знают, когда за двумя поддельными личностями стоит один и тот же шпион
- Если агент говорит вам, что две поддельные личности контролируются одним и тем же шпионом, вы уверены, что они правы.
Сообщения агента
Агенты отправляют вам загадочные сообщения, сообщающие, у каких личностей за спиной стоит один и тот же шпион. Пример:
У вас есть 2 агента и 5 поддельных личностей, чтобы иметь дело с.
Первый агент отправляет вам сообщение:
Red Red Blue Orange Orange
Это означает, что они думают, что есть 3 шпиона:
- первый (красный) контролирует тождества 1 и 2
- второй (синий) контролирует личность 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