#P1185. 逻辑表达式的可满足性

    ID: 186 远端评测题 1000ms 128MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>湖南省第一届大学生计算机程序设计竞赛(HNCPC2005)

逻辑表达式的可满足性

Description

逻辑表达式有如下形式: 1. 原子式,用一个区分大小写的字母表示; 2. 组合式;若 AB 是逻辑表达式,则(A|B)也是,意为“AB”; (A&B)意为“AB”;

~A 意为“非A”; (A->B)意为“A推出B”,或等价的“B或非A”。

以上表达式的形式是固定的,其中的括号不能缺少,且字符间没有空格。

对于某个逻辑表达式,如果变换其中原子式的取值(真或假),该表达式的整体取值可能为真,则称这样的逻辑表达式是可满足的,否则是不可满足的。比如下面的表达式都是可满足的:

q
(a|(b&c))
((a&~a)->z)

而这些是不可满足的:

(q&~q)
(((a|~b)&(~a|b))&(a&~b))

编写程序,判断某个逻辑表达式的可满足性。

Input

不超过500组数据,每组数据一行,是一个逻辑表达式,每个表达式最多 10 个原子式,且不超过 150 个字符。没有空行,也没有空格。

Output

每行包含一个字符,’y’表示输入文件对应行中的逻辑表达式是可满足的,或者‘n’表示输入文件对应行中的逻辑表达式是不可满足的。

q
(a|(b&c))
((a&~a)->z)
(q&~q)
(((a|~b)&(~a|b))&(a&~b))
y
y
y
n
n