#P16514. [NEERC2007 Northern]Formula
[NEERC2007 Northern]Formula
题目背景
Nick 是一名研究布尔逻辑的数学家。他尤其关注一种特殊的布尔函数:无重复函数。
题目描述
若一个布尔函数可以表示为一棵公式树,并且公式中每个变量至多出现一次,则称这个函数是无重复的;这样的公式称为无重复公式。
本题使用如下语法:
- 变量:小写字母
a到k; - 括号:若 是公式,则
(E)也是公式; - 否定:
~E; - 合取:
E1 & E2 & ... & En; - 析取:
E1 | E2 | ... | En。
运算优先级从高到低依次为:
- 括号;
- 否定
~; - 合取
&; - 析取
|。
给定一个语法正确的布尔公式。你需要判断它所表示的布尔函数是否为无重复函数。
若是,还需要输出一个与原公式等价的无重复公式。
“无重复”限制的是输出公式中的变量出现次数,而不是输入公式本身。
输入格式
输入仅一行,为一个布尔公式。
公式由字符 a 到 k、(、)、~、&、| 组成,各个记号之间可以插入任意数量的空格。
输出格式
若该函数不是无重复函数,输出:
No
否则第一行输出:
Yes
第二行输出一个与输入函数等价的无重复公式,格式与输入相同。
输出公式长度不能超过 个字符。
样例
样例 1
输入:
(a | b) & (a | c)
输出:
Yes
a | b & c
样例 2
输入:
d&~d
输出:
No
样例 3
输入:
d & ~d | ~((a|~b) & (a|c))
输出:
Yes
~a&(b|~c)
样例 4
输入:
a & b | ~ a & ~b
输出:
No
数据范围
- 输入公式长度不超过 ;
- 变量只可能是
a到k,因此变量种数不超过 ; - 输入公式保证语法正确。