#P1745. [CERC2016] Lost Logic

[CERC2016] Lost Logic

Description

Gustav 正在阅读关于「2-可满足性」的问题,这是一个著名的问题,涉及为布尔变量分配真值以满足一系列「约束」——每个约束是涉及两个变量的简单逻辑公式。

我们使用 nn 个变量 x1,x2,,xnx_1, x_2, \cdots , x_n,这些变量可以取值 00(假)和 11(真)。一个约束是形如 aba\to b 的公式,其中 aabb 都是可能被取反的变量。通常,\to 表示逻辑蕴涵:aba \to b 仅在 aa11bb00 时为 00。变量 aa 的取反表示为 !a!a

给定变量的一个赋值,我们称约束在其结果为 11 时被「满足」。Gustav 构建了一系列约束,并正确地得出有「恰好三种」不同的变量赋值可以满足所有约束。Gustav 写下了所有三种赋值,但不幸的是,他丢失了约束列表。 给定三个变量的 nn 个值的赋值,找出一个最多包含 500500 个约束的列表,使得这三个给定的赋值是唯一满足所有约束的赋值。

Input Format

第一行包含一个整数 n(2n50)n (2 \leq n \leq 50) —— 变量的数量。接下来三行,每行描述一个赋值。第 kk 行包含 nn 个用空格分隔的整数 v1k,v2k,,vnkv_1^k,v_2^k,\cdots,v_n^k,其中每个 vikv_i^k 不是 00 就是 11,表示第 kk 个赋值中变量 xix_i 的值。所有三个赋值将是不同的。

Output Format

如果没有解,输出一行包含整数 1-1。 否则,第一行应包含一个整数 mm,其中 1m5001 \leq m \leq 500 —— 你解决方案中的约束数量。接下来的 mm 行中的第 kk 行应包含第 kk 个约束。每个约束应根据以下规则构造一个字符串:

  • 一个「变量」是形如「xi\texttt{x}i」的字符串,其中 ii 是一个介于 11nn 之间的整数,且不含前导零。
  • 一个「文字」是一个可能以「!\texttt{!}」字符开头的变量组成的字符串。
  • 一个「约束」是形如「a -> ba\texttt{ -> }b」的字符串,其中 aabb 都是文字。蕴涵符号由「减号」和「大于号」字符组成,且在蕴涵符号前后各有一个空格字符。
3
0 0 0
0 1 0
1 0 0
3
x1 -> !x2
x3 -> x1
x3 -> x2
4
0 0 1 0
1 0 0 0
1 0 1 1
-1

Hint

(由 ChatGPT 4o 翻译)