#1420. [ACSL] 2019-2020 Contest 3 Veitch

[ACSL] 2019-2020 Contest 3 Veitch

描述

维奇图(Veitch Diagram)是布尔表达式的一种表示方法。通过把X填入方格内,并与相邻的已填入X的方格组成一组来描述。上面这些维奇图都已经填入X。每个图都表示一个布尔表达式,且最多有3个变量。 如果变量及其否定都出现在一项中,则将该变量从项的表示形式中删除。每一项始终以OR符号(+)连接,且其中每一项中的变量都是用AND连接,但AND总是隐含的。每个X在形成组时只能使用一次。〜符号表示NOT。

X按以下优先级进行分组:

  1. 相邻的4个X组成一组。如图1和图2所示,当4个相邻的X组成一组时,表示为一项。图1表示的是~A。注意如果B~BC~C都出现在有X的组内,应删除。4个相邻的X组成一组的优先顺序为,先顶行,然后是底行,最后是从左列到右列。图2表示的是~B

  2. 4个X在分别位于两端列组成一组,也就是第一列和最后一列都被X填满。只有一种方法可以做到这一点,即产生~C

  3. 2个相邻的X组成一组。当2个相邻的X组成一组时,就会形成一个由2个变量组成的项。在图3中,有2组2个相邻的X。2个相邻的X组成一组的优先顺序为,从左到右的顶行,从左到右的底行,然后从左列到右列。顶行那组表示的是~AB,底行那组表示的是A~B,因此图3表示的是~AB+A~B

  4. 位于同行的最左列和最右列的2个X组成一组。优先顺序为,与X相邻的顶行,如图4所示。该图的顶行在最左列和最右列与X相邻,因此那个部分表示的是B~C

  5. 单个X的优先顺序为,先顶行,后底行,最后从左列至右列。例如图4中存在一个单个X无法使用上述规则。单个X始终表示一个有3个变量的项,按照字母表的顺序,转换后为A~BC。因此图4的表达式为B~C+A〜BC

输入输出格式

输入

将会有5行输入,每一行输入都会包含一个 2个字符的字符串。这两个字符各自代表一个十六进制数值。每个字符都需要被转换成四位二进制数,若位数不够,前面补0,并分别放在图中的第一行和最后一行,1表示维奇图中X的位置。如图4的输入值是94,它表示1001和0100。

输出

对于每一行输入,使用上面的规则和优先顺序打印输出表达式。由于上述列出的优先级顺序,每一项必须按照指定的顺序列出。此外,必须始终按ABC顺序排列。

样例数据

33
3C
94
77
95
~A
~AB+A~B
B~C+A~BC
C+~A~C
~A~C+AB~C+A~BC