你在 ECorp 工作,人力资源部门正在将员工数据从 Hooli 提供的本地系统迁移到初创公司 Pied Piper 提供的全新云原生解决方案中。遗憾的是,新系统尚未实现与旧系统的功能对等,他们需要你的帮助来存储和展示整个管理结构。该系统非常精简且注重资源使用,因此他们只能负担得起增加两千比特的存储空间。
输入格式
输入的第一行是一个命令,执行 ENCODE 或 DECODE。
Encode
你将收到描述经理及其直接下属的行。所有行都将以经理的名字开头,后跟一个冒号,再后跟一个以空格分隔的直接下属列表,按从最受喜爱到最不受喜爱的顺序排列。冒号后有一个尾随空格。如果经理有上级,则该经理不会出现在其上级之前。
Decode
在解码情况下,你将获得你的程序在编码情况下打印的输出:一个包含所有员工名字的列表,顺序任意,每行一个,后跟一行二进制字符串 $B$。
数据范围
- $2 \le$ ECorp 的员工总数 $\le 600$
- $|B| \le 2048$
- 员工名字最多 10 个字符,由英文字母的大小写组成。
- 恰好有一名员工没有经理(公司 CEO),且没有员工拥有超过一名经理。
输出格式
Encode
你的程序必须首先输出所有员工的名字,每行一个,顺序任意(这是上层管理部门的要求)。额外的一行专门用于你的编码字符串 $B$,它必须由 0 和 1 组成,且长度不超过 2048 个字符。
Decode
以与原始输入相同的格式输出原始结构。经理定义的顺序不必相同,但如果某人有经理,则其定义必须出现在其经理之后。然而,对于任何特定经理,其下属的顺序必须保持不变(从最受喜爱到最不受喜爱)。
样例
输入 1
ENCODE Janez: Josip Zofia Zofia: Karolina
输出 1
Josip Karolina Janez Zofia 00101100
输入 2
DECODE Josip Karolina Janez Zofia 00101100
输出 2
Janez: Josip Zofia Zofia: Karolina
说明
上述示例中的编码对列表中的每个人使用了两个连续的字符。11 表示 CEO(Janez)。00 表示处于层级结构第二层的人。他们在 CEO 直接下属列表中的顺序与编码后的名字列表(Josip 和 Zofia)中的顺序相同。幸运的是,在这种情况下只有两个。10 表示 Zofia 的下属,而 01 将表示 Josip 的下属,但他没有下属。