SP3253 EDS - Electronic Document Security

题目描述

泰瑞尔公司使用了一种最先进的电子文档系统,全面控制文档的创建、查看、编辑和分发过程。文档的安全性通过访问控制列表(ACL)来管理。一个 ACL 定义了一组可以访问文档的实体,以及每个实体所拥有的权限。实体用大写字母表示,可以代表一个人或一个部门。权限用小写字母表示,例如,_a_ 表示追加,_d_ 表示删除,_e_ 表示编辑,_r_ 表示读取。 文档的 ACL 和文档一起储存,同时还有一个独立的日志服务器记录 ACL 日志。所有文档最开始的 ACL 是空的,代表没有人有任何权限。每当文档的 ACL 改动时,会在日志中添加一条新的记录。记录的格式为 _ExR_,其中 _E_ 是一组非空的实体,_R_ 是一组非空的权限,_x_ 表示操作类型,可以是 "+"、"–" 或 "="。_E_+_R_ 表示将 _R_ 中的权限授予 _E_ 中的实体;_E_–_R_ 表示从 _E_ 中的实体移除 _R_ 中的权限;_E_=_R_ 表示 _E_ 中的实体只有 _R_ 中的权限。记录可能会冗余,比如授予已经存在的权限或撤销不存在的权限。日志是按时间顺序排列的条目列表,新条目会优先于旧条目生效。 泰瑞尔公司定期进行安全检查,通过日志计算当前每个文档的 ACL,并与实际存储的 ACL 进行比对。如果两者不一致,说明存在安全问题。你的任务是编写一个程序,根据给定的 ACL 日志,计算出当前的 ACL 状态。

输入格式

输入由一行或多行的 ACL 日志组成,每个日志长度在 3 到 79 个字符之间,每行一个日志。输入以一个仅包含 "#" 的单独一行结束。日志严格遵循指定格式,不含空白字符。

输出格式

对于每个日志,输出一行,格式为:日志编号(从 1 开始)加上一个冒号,再加上当前的 ACL。 注意: 1. 输出中不包含空格。 2. 实体按字母顺序排列,权限同样按字母顺序列出。 3. 没有权限的实体不列出(即使它们出现在日志中),所以 ACL 可能为空。 4. 如果连续的实体具有相同的权限,权限只需在实体列表后输出一次。 **本翻译由 AI 自动生成**