#P16514. [NEERC2007 Northern]Formula

[NEERC2007 Northern]Formula

题目背景

Nick 是一名研究布尔逻辑的数学家。他尤其关注一种特殊的布尔函数:无重复函数

题目描述

若一个布尔函数可以表示为一棵公式树,并且公式中每个变量至多出现一次,则称这个函数是无重复的;这样的公式称为无重复公式

本题使用如下语法:

  • 变量:小写字母 ak
  • 括号:若 EE 是公式,则 (E) 也是公式;
  • 否定:~E
  • 合取:E1 & E2 & ... & En
  • 析取:E1 | E2 | ... | En

运算优先级从高到低依次为:

  1. 括号;
  2. 否定 ~
  3. 合取 &
  4. 析取 |

给定一个语法正确的布尔公式。你需要判断它所表示的布尔函数是否为无重复函数。

若是,还需要输出一个与原公式等价的无重复公式。

“无重复”限制的是输出公式中的变量出现次数,而不是输入公式本身。

输入格式

输入仅一行,为一个布尔公式。

公式由字符 ak()~&| 组成,各个记号之间可以插入任意数量的空格。

输出格式

若该函数不是无重复函数,输出:

No

否则第一行输出:

Yes

第二行输出一个与输入函数等价的无重复公式,格式与输入相同。

输出公式长度不能超过 10001000 个字符。

样例

样例 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

数据范围

  • 输入公式长度不超过 10001000
  • 变量只可能是 ak,因此变量种数不超过 1111
  • 输入公式保证语法正确。