Електронна охорона документів
Корпорація Тайрелл використовує сучасні електронні системи документообігу, які контролюють усі аспекти створення документів, їх перегляду, редагування та поширення. Контроль за безпекою документу здійснюється при допомозі списків контролю доступу (ACL). ACL визначає набір об'єктів, які мають доступ до документу, і для кожного об'єкту визначається набір прав, які він має. Особи позначені великими літерами, підприємство може складатись з однієї людини або багатьох. Права позначаються рядковими літерами; наприклад, приклади прав: a для додавання, d для видалення, e для редагування та r для читання.
ACL для документу зберігаються разом з цим документом, але є також окремий журнал ACL, який зберігається на окремому сервері журналів. Усі документи починаються з порожньої ACL, яка не надає прав нікому. Кожен раз, коли ACL для документів змінився, новий запис буде записано у журнал. Запис у вигляді ExR, де E - непорожня множина сутностей, R - непорожня множина прав, та x або "+", або "-" або "=". Запис E+R говорить про те, що потрібно надати усі права в R для усіх осіб в E, запис E-R говорить про те, что потрібно видалити усі права в R для усіх осіб в E, а також запис E=R говорить про те, що усі об'єкти в E дорівнюють правам особи в R і ніяких інших записів. Запис може бути надлишковою у тому смислі, що вона надає суб'єкту ті права, які у нього вже є, і/або заперечує сутність прав, яких він не має. Журнал являє собою просто список елементів, відокремлених комами, у хронологічному порядку від більш ранніх до більш нових. Записи є кумулятивними, права нових записів переважають над правами старих записів, якщо є конфлікт.
Періодично у корпорації Тайрелл буде працювати перевірки безпеки при допомозі журналів для визначення поточної ACL для кожного документу, а потім порівнювати його з ACL, які зберігаються разом з документом. Невідповідність вказує на порушення безпеки. Ваша задача написати програму, яка за записами журналу ACL, визначає поточне значення ACL.
Вхідні дані
Вхідні дані складаються з одного або декількох журналів ACL, кожен з яких містить 3-79 символів у окремому рядку, а потім рядок, який містить лише "#", і позначає кінець вхідних даних. Журнал буде у форматі, описаному вище, і не буде містити ніяких пропусків.
Вихідні дані
Для кожного журналу вивести один рядок, який містить номер журналу (журнали нумеруються послідовно, починаючи з одиниці), потім двокрапка, далі - значення поточних ACL у форматі, показаному нижче. Зверніть увагу, що:
(1) пропуски не містяться у вихідних даних;
(2) особи перераховані у алфавітному порядку;
(3) права на об'єкт також перераховані у алфавітному порядку;
(4) існують особи, для яких поточні права не вказано (навіть якщо вони з'явились у запису журналу), так що цілком можливо, что ACL будет порожнім, і якщо дві чи більше послідовних особи мають точно такі ж права, то ці права вказуються на виході лише один раз, після того, як виведено список суб'єктів.