这是一个交互式问题。
懒惰的 Sam 和勤奋的 Sarah 被要求在由字符集 $\{H, T\}$ 组成的长度为 $n$ 的字符串集合上设计两个有趣的概率分布。懒惰的 Sam 只会简单地抛 $n$ 次硬币(每次抛硬币正面朝上的概率为 $\frac{1}{2}$,且所有抛硬币事件相互独立),并在每次正面朝上时写下 “H”,反面朝上时写下 “T”。你想帮助勤奋的 Sarah 给懒惰的 Sam 上一课。给你一个整数 $t$。请帮助 Sarah 设计一个与均匀分布 $t$-接近($t$-close)的分布,同时通过交互式地证明,在长度为 $t$ 的神谕访问(oracle access)下,你可以区分懒惰的 Sam 和勤奋的 Sarah 的分布。
形式化地,对于某个整数 $n$,考虑大小为 $2^n$ 的集合 $S = \{H, T\}^n$,它由字符集 $\{H, T\}$ 构成的所有可能的长度为 $n$ 的字符串组成。集合 $S$ 上的一个分布定义为一个由非负实数组成的、长度为 $2^n$ 的数组 $\{a_s\}_{s \in S}$,其以 $S$ 中的元素为下标,且它们的和等于 $1$。最简单的分布之一是均匀分布,其中所有的 $a_s$ 都等于 $2^{-n}$。
对于一对数 $\varepsilon \in [0; +\infty)$ 和 $k \in \{0, 1, \dots, n\}$,如果对于任意的 $k$ 个位置的选择 $1 \le i_1 < i_2 < \dots < i_k \le n$ 以及任意大小为 $k$ 的字符串子集 $T \subseteq \{H, T\}^k$,以下条件均成立,则称 $\{a_s\}_{s \in S}$ 是一个 $(\varepsilon, k)$-独立分布:在 $2^{n-k}$ 个子序列 $s[i_1]s[i_2]\dots s[i_k]$ 属于 $T$ 的字符串 $s$ 上,$a_s$ 的总和与 $\frac{|T|}{2^k}$ 的差值不超过 $\varepsilon$。用概率论的术语来说,这可以表示为:
$$\forall 1 \le i_1 < i_2 < \dots < i_k \le n \quad \forall T \subseteq \{H, T\}^k \quad \frac{|T|}{2^k} - \varepsilon \le \mathbb{P}_{s \leftarrow \{a_s\}_{s \in S}} \{s[i_1]s[i_2]\dots s[i_k] \in T\} \le \frac{|T|}{2^k} + \varepsilon$$
直观地说,这意味着要将该分布与均匀分布区分开来,你写下的分布要么需要区分差值不超过 $\varepsilon$ 的概率,要么需要查看该分布生成的字符串中超过 $k$ 个位置的字符。
如果分布 $\{a_s\}_{s \in S}$ 是 $(2^{-t}t, t)$-独立的,则称其为与均匀分布 $t$-接近 的。
在 $(\varepsilon, k)$-独立的定义中,隐含了你必须先选择 $k$ 个位置,然后才能研究这 $k$ 个位置上的概率分布。但在长度为 $k$ 的神谕访问(oracle access)模型中,情况完全不同。首先生成一个长度为 $n$ 的随机字符串,然后进行 $k$ 轮如下格式的交互:你调用一个整数 $i \in \{1, 2, \dots, n\}$,作为响应,你将被告知 $s[i]$。你可以根据之前所有提问及回答,来决定下一步调用哪个位置。
为了证明你可以区分懒惰的 Sam 和勤奋的 Sarah 的分布,你需要对从他们的分布中采样出的 $m$ 个长度为 $n$ 的字符串(每个字符串都是独立且等概率地从 Sam 或 Sarah 的分布中生成的)进行长度为 $t$ 的神谕访问,并对每一个字符串判断它是从谁的分布中采样出来的,且正确预测的次数至少为 $0.75m - 2\sqrt{m}$。
交互格式
第一行包含一个整数 $t$,表示与均匀分布所需的接近程度以及神谕访问的长度($1 \le t \le 5$)。
作为响应,你需要输出一行,包含一个整数 $n$,表示你准备为其提供分布以及可区分性交互证明的字符串长度($t \le n \le 20$)。
在下一行中,输出 $2^n$ 个整数 $b_s$,定义你的分布($0 \le b_s < 2^{64}$ 且 $\sum_{s \in S} b_s > 0$)。基于这些数据,评测机将根据规则 $a_s = b_s / \sum_{s \in S} b_s$ 来确定分布 $\{a_s\}_{s \in S}$。$b_s$ 的值必须按照字符串 $s$ 的字典序依次列出:例如,当 $n = 3$ 时,输出的顺序应当为:$b_{HHH}, b_{HHT}, b_{HTH}, b_{HTT}, b_{THH}, b_{THT}, b_{TTH}, b_{TTT}$。
接下来,读入一个整数 $m$,表示交互测试的次数($1 \le m \le 10^4$)。随后,将依次进行 $m$ 次测试。
在每次测试开始时,评测机将首先以 $\frac{1}{2}$ 的概率选择懒惰的 Sam 或勤奋的 Sarah 的分布 $\{a_s\}_{s \in S}$。之后,评测机采样一个随机字符串 $s \sim \{a_s\}_{s \in S}$:任何字符串 $s$ 被采样的概率为 $a_s$。然后,评测机允许你对字符串 $s$ 的字符进行不超过 $t$ 次提问。要进行提问,请输出一行,包含一个整数 $q \in \{1, 2, \dots, n\}$,表示你感兴趣的字符位置。之后,读入一个字符 “H” 或 “T” 作为该询问的回答。在进行 $0$ 到 $t$ 次提问后,如果你认为 $s$ 来自懒惰的 Sam 的分布,请输出一行 “Sam”;如果你认为 $s$ 来自勤奋的 Sarah 的分布,请输出一行 “Sarah”。在此之后,立即进入下一次测试,直到完成所有 $m$ 次测试。
输出的字符串不区分大小写。
在输出每一行后,请不要忘记清空输出缓冲区(flush)。
样例
输入样例 1
2 3 T T T T T
输出样例 1
3 7 4 8 9 7 6 7 1 1 2 SAM 1 2 Sarah 3 sARaH