Игры для Нас
GamesAreUs.com недавно завершила внешний аудит за этот год. Одной из выявленных проблем стало отсутствие бизнес-правил для назначения разрешений на файлы на общем файловом сервере компании. Аналитики работают над созданием ролей для всех сотрудников и определением, какие разрешения должны быть предоставлены каждой роли. Ваша команда должна изучить текущую ситуацию, чтобы предоставить аналитикам свои предложения.
К счастью, назначение разрешений не было полностью случайным. Наиболее распространенный способ настройки нового сотрудника — это запросить, чтобы его настроили "точно как Джо", фактически создавая систему прототипов на ходу.
Вам будут предоставлены списки управления доступом (ACL) для верхних уровней директорий общего файлового сервера. Используя их, ваша команда должна написать программу, чтобы разделить пользователей на классы эквивалентности, где все члены класса имеют доступ к точно тем же директориям.
Из-за наличия нескольких отделов в GamesAreUs.com, необходимо обработать несколько списков управления доступом: по одному набору списков на каждый отдел.
Входные данные
Первая строка входных данных для вашей программы — это одно целое число n (0 < n < 100), само по себе на строке без пробелов, указывающее количество отделов. Далее следуют данные для этих отделов.
Списки управления доступом, связанные с одним отделом, представляют собой последовательность ACL, заканчивающуюся "-1" само по себе. Каждый ACL — это строка из неотрицательных целых чисел (1 ≤ x ≤ 2147483647), разделенных друг от друга одним пробелом. Первое число в строке — это идентификатор файла (FID) директории. Остальные числа в строке — это идентификаторы пользователей (UID), имеющих доступ. В каждой строке будет FID и как минимум один UID. На строке не будет повторяющихся UID, но обратите внимание, что UID и FID находятся в разных пространствах, поэтому UID может быть тем же числом, что и FID. ACL, и внутри ACL UID, появляются в произвольном порядке. В полном списке ACL данный FID появится только один раз. Максимум 50 ACL верхнего уровня и максимум 100 UID. Все FID и UID больше 0.
Выходные данные
Для каждого отдела первая строка вывода идентифицирует, какой случай обрабатывается, начиная с 1. Эта строка содержит слово "Case", один пробел и целое число, идентифицирующее, какой это случай.
Для каждого класса с как минимум 2 членами напечатайте строку с количеством членов в классе без знака или ведущих нулей, одним пробелом и наименьшим UID в классе без знака, ведущих нулей или завершающих пробелов. Отсортируйте вывод по количеству членов, по убыванию, а затем по UID, по возрастанию. Если таких классов нет, напечатайте "no prototypes found".