Электронная охрана документов
Корпорация Тайрелл использует современные электронные системы документооборота, которые контролируют все аспекты создания документов, их просмотра, редактирования и распространения. Контроль безопасности документа осуществляется с помощью списков контроля доступа (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 будет пустым, и если два или более последовательных лица имеют точно такие же права, то эти права указываются на выходе только один раз, после того, как выведен список субъектов.