小 L 今天学习了 Kleene 三值逻辑。
在三值逻辑中, 一个变量的值可能为: 真(True,简写作 T)、假(False,简写作 F)或未确定(Unknown,简写作 U)。
在三值逻辑上也可以定义逻辑运算。由于小 L 学习进度很慢, 只掌握了逻辑非运算 ¬ ,其运算法则为:
¬ T = F, ¬F = T, ¬ U = U.
现在小 L 有 n 个三值逻辑变量 x1 , · · · , xn。小 L 想进行一些有趣的尝试, 于是他 写下了 m 条语句。语句有以下三种类型,其中 ← 表示赋值:
- xi ← v,其中 v 为 T, F, U 的一种;
- xi ← xj ;
- xi ← ¬xj 。
一开始,小 L 会给这些变量赋初值,然后按顺序运行这 m 条语句。
小 L 希望执行了所有语句后, 所有变量的最终值与初值都相等。在此前提下, 小 L 希望初值中 Unknown 的变量尽可能少。
在本题中, 你需要帮助小 L 找到 Unknown 变量个数最少的赋初值方案, 使得执行 了所有语句后所有变量的最终值和初始值相等。小 L 保证, 至少对于本题的所有测试用 例,这样的赋初值方案都必然是存在的。
