Alan Mathison Turing 是一位英国计算机科学家和数学家。他是理论计算机科学的先驱,提出了图灵机,这是一种由计算数学模型定义的抽象机器。
图灵机的工作原理如下:它拥有一定数量的状态、一条无限长的纸带,纸带上可以写入特定的符号集,并且在特定的转换规则集下运行。从初始状态开始,磁头指向某个位置,根据当前状态和磁头指向的纸带上的符号,图灵机可以决定磁头移动的方向(或停机),以及要在纸带上写回什么符号。
一个有趣的问题(停机问题)是:是否可以确定某台图灵机在给定的输入(纸带上的初始符号)下最终会停机,还是会永远运行下去。事实证明,这是无法确定的。然而,仍然有一些好消息!完全可以证明一台图灵机是否会在 10 步之内停机。作为给你的挑战,我们希望你告诉我们答案。
输入格式
输入的第一行是一个整数 $T$ ($T \le 20$),表示测试用例的数量。
每个测试用例首先给出图灵机的描述。它以一个整数 $n$ ($1 \le n \le 10$) 开头,表示该图灵机中的状态数量。其中状态 1 是起始状态,状态 $n$ 是唯一的停机状态,即图灵机进入该状态后会停机。
接下来的 $n - 1$ 行是状态 1 到 $n - 1$ 的转换规则。注意,由于状态 $n$ 是停机状态,它没有转换规则。为了简化问题,本题中的图灵机仅使用三种符号,即 0、1 和 2。每行转换规则包含 3 个以空格分隔的元组 $(x, y, z)$,其中 $x$ 表示图灵机将转换到的下一个状态,$y$ 表示磁头移动的方向(1 表示向右,-1 表示向左),最后 $z$ 表示应该写回纸带上的符号。注意,磁头会先写回符号,然后移动。对于这 $n - 1$ 行中的第 $i$ 行,这 3 个元组分别代表状态 $i$ 在读取符号 0、1 和 2 时的转换。例如,第五行的第二个元组代表状态 5 在磁头指向符号 1 时的转换规则。
之后是一个整数 $m$ ($m \le 100$),表示查询的数量。每个查询占一行,其中第一个数字 $x$ ($0 \le x \le 10$) 是输入中的符号数量,随后是 $x$ 个符号。这些符号将依次写入纸带,初始磁头位置指向第一个符号。输入中仅会出现符号 0 和 1,因为符号 2 实际上代表图灵机中的空白符号。因此,你可以假设输入之前和输入之后纸带上的每个符号都是 2。例如,输入 3 1 0 0 在纸带上实际上看起来是:“... 2 2 2 1 0 0 2 2 2 ...”,其中磁头最初指向符号 1,且纸带两端的符号 2 向两侧无限延伸。
输出格式
对于每个测试用例,首先打印 “Machine #N:”,其中 $N$ 是测试用例的编号。然后对于每个查询,如果机器在 10 步内停机,则在一行中打印 “yes”,否则打印 “no”。
样例
样例输入 1
3 3 (2, 1, 0) (2, 1, 1) (2, 1, 2) (3, 1, 0) (1, -1, 0) (1, -1, 2) 3 3 1 0 0 2 1 1 1 1 4 (2, 1, 1) (3, 1, 0) (1, -1, 2) (1, -1, 0) (1, -1, 1) (1, -1, 2) (2, 1, 1) (2, 1, 0) (4, -1, 2) 2 3 0 0 0 5 0 0 0 0 0 2 (1, -1, 2) (2, -1, 0) (1, 1, 2) 2 2 0 0 1 1
样例输出 1
Machine #1: yes yes no Machine #2: yes no Machine #3: no yes