计算机科学与工程系不仅开设与算法相关的课程,还开设与计算机硬件相关的课程。其中一门入门课程解释了集成电路(“芯片”)、二进制逻辑、布尔代数等基本原理。如你所知,逻辑电路的最基本单元被称为门(gate)。门是执行一种简单逻辑运算的元件。它可以通过线(line)与其他门相连。
逻辑电路可以绘制成图画,其中门表示为正方形,输入在左侧,输出在右侧。在每个正方形中,有一个符号决定了门的类型:数字 $1$ 表示或门(OR gate,当且仅当没有输入的值为 $1$ 时,其输出为 $0$),& 是与门(AND gate,当且仅当没有输入为 $0$ 时,输出为 $1$),= 是异或门(XOR gate,当且仅当有奇数个输入的值为 $1$ 时,输出为 $1$)。
你的任务是扫描这样一幅“图画”并计算所有命名电路输出的值。线路可能会分支并重新合并,但你可以假设每个“值消费者”(门的输入端口或命名的输出)都将连接到恰好一个“值源”(门的输出端口或输入值)。不会存在反馈回路,即不存在通过同一个门两次的环路。
输入格式
输入包含多幅图画。每幅图画由至少 $1$ 行且最多 $200$ 行组成,每行由以下字符构成:
- 空格(
" "):图画中的空白空间。空格用于将其他字符缩进到合适的位置,因为字符的准确位置通常很重要。输入行末尾的尾随空格可能会出现,但也可能会被省略。 - 连字符(
"-"):水平线。它将左侧和右侧的字符连接在一起,这些字符将始终存在并能够“接受”该连接。 - 竖线(
"|"):垂直线,连接直接位于其上方和下方的字符。与水平线类似,这些字符将始终接受该连接。 - 加号(
"+"):线路连接或弯折。连接所有四个方向上的字符。所有能够接受连接的字符都被视为已连接(至少会有两个)。然而,可能有些方向包含非空字符但并未连接。例如,如果加号正下方的未知位置有一个连字符,它们不被视为已连接。 - 小写字母 x(
"x"):两条线路交叉但不连接。所有四个相邻字符都将接受该连接。上方的字符与下方的字符相连,左侧的字符与右侧的字符相连,但这两对之间没有相互连接。 - 等号(
"="):表示输入或输出端口。它总是连接其左侧和右侧的字符,这两个字符中至少有一个是端口。如果左侧有一个端口,它只能是值源。如果右侧有一个端口,它只能是值消费者。 - 小写字母 o(
"o"):非门(取反)。该字符的左侧总是有一个门,右侧总是有一个端口。它使该特定门的输出取反。 - 井号(
"#"):门,它总是呈矩形,具有两个垂直边和两个水平边。左侧垂直边可以连接到输入端口,右侧边连接到输出端口(可能被取反)。没有两个门会互相接触边缘,这意味着任何在垂直或水平方向上相邻的井号总是属于同一个门。 矩形的大小在两个方向上都至少为 $3$ 个字符,这意味着内部至少有一个字符。所有内部字符都是空的(空格),只有一个例外。该唯一的非空字符表示门的类型(注意,它在门区域内的含义可能与在门区域外不同),它将是数字“一”("1")、和号("&")或等号("=")。 - 二进制数字(
"0"和"1"):电路的输入值。它与其右侧的字符相连,该字符总是等号。 - 大写字母(
"A"到"Z"):电路的命名输出。它接受来自其左侧的连接,左侧字符总是等号。每个字母最多出现一次,这意味着电路输出的数量在 $0$ 到 $26$ 之间(含)。
每幅图画都将以一行仅由星号("*")字符组成的行(至少一个)结束。最后一幅图画后面将有两行这样的星号行。输入中没有任何一行的长度会超过 $200$ 个字符。
输出格式
对于每幅图画,按字母顺序排序输出所有命名输出的值。每个输出行应包含三个字符:输出名称(一个大写字母)、等号和二进制值($0$ 或 $1$)。在每个测试用例之后输出一个空行。
样例
输入样例 1
0=+ | | ####### +=# # # & #o=--+ 1=------=# # | # #| ####### +--=### ### | #=#=#1#o==X 1=-----------x--=# # ### 1=---x--=### +------------=Y *********************************** 1=A *** *
输出样例 1
X=0 Y=1 A=1