#P2269. Friends

    ID: 1270 传统题 2000ms 256MiB 尝试: 4 已通过: 1 难度: 10 上传者: 标签>Ulm Local 1999集合运算表达式解析字符串处理

Friends

描述

你打算和朋友们举办一场盛大的生日派对。在策划过程中,你发现需要对朋友集合进行大量运算。有一个由亚瑟(Arthur)、比内(Biene)和克莱门斯(Clemens)组成的小组,记为 g1g_1;还有一个你在滑雪时结识的朋友小组,成员包括丹尼尔(Daniel)、恩斯特(Ernst)、弗里达(Frida)和古斯塔夫(Gustav),记为 g2g_2。如果你想同时邀请这两个小组,那么派对参与者集合就是 g1+g2g_1 + g_2(这里的结果是两个集合的并集)。接着,你可以计算这两个小组的交集 g1g2g_1 * g_2,其结果为空集。也许你想邀请小组 g1g_1,但要排除另一个小组 g2g_2 的所有成员,这可以表示为 g1g2g_1 - g_2

交集(*)的运算优先级高于并集(+)和集合差(-)。所有运算都是左结合的,这意味着在表达式 A op1 B op2 CA\ op1\ B\ op2\ C 中,若 op1op1op2op2 优先级相同,你需要先计算 A op1 BA\ op1\ B

输入

输入包含一行或多行。每行包含一个需要计算的表达式。表达式在语法上是正确的,仅由以下字符组成:

  • '{' 和 '}'
  • 元素 'A' 到 'Z',分别代表从亚瑟(Arthur)到佐拉(Zora)的朋友。
  • 运算符 '+'、'-' 和 '*'
  • '(' 和 ')',用于对运算进行分组
  • 换行符 '\n',表示表达式的结束

每行的长度不会超过 255 个字符。

输出

将计算得到的集合用花括号 '{' 和 '}' 括起来输出,每个结果占一行。集合中的元素按字母顺序排序。

输入数据 1

{ABC}
{ABC}+{DEFG}+{Z}+{}
{ABE}*{ABCD}
{ABCD}-{CZ}
{ABC}+{CDE}*{CEZ}
({ABC}+{CDE})*{CEZ}

输出数据 1

{ABC}
{ABCDEFGZ}
{AB}
{ABD}
{ABCE}
{CE}

来源

乌尔姆本地赛 1999