每天,劫匪计划在该地区抢劫一家银行。由于卧底情报人员的工作,侦探们在每天早上 6 点前就能获知劫匪当天具体要抢劫哪家银行。只要银行里有一名侦探,就足以震慑劫匪,因此侦探们希望明智地规划他们的位置。抢劫计划在早上 8 点银行开门后的白天进行,如果银行里没有侦探,抢劫总是会成功。遗憾的是,侦探的数量并不多,因此可能没有足够的侦探来保障所有银行的安全。为了确保侦探有效,任何时候任何银行最多只能有一名侦探。侦探只能在早上 6 点到 8 点之间离开一家银行并前往另一家银行。
只要有足够的天数,任何侦探都能通过 2 小时的中转从任何一家银行移动到任何其他银行。由于旅行限制(主要是时间),他们无法自由移动,只能在彼此靠近的银行之间移动。该地区非常特殊,因为符合上述限制的靠近银行对的数量最少。此外,没有银行恰好与两家其他银行靠近。
现在,有一个计算机模拟任务:确定劫匪是否能在一年内成功抢劫至少一次。该模拟作为一种计算机游戏与预先编程的裁判进行对抗,在现实中具有重大后果。在游戏中,攻击者代表劫匪,防御者管理侦探。
在开始时,模拟程序会获得靠近银行之间的连接系统以及可用的侦探数量。然后,模拟程序选择扮演攻击者还是防御者。裁判自动采取相反的角色。接下来,防御者根据自己的选择将给定数量的侦探放置在银行中。
接下来,游戏按回合进行。在一回合中,攻击者宣布一家银行,然后防御者将每名侦探移动最多一个连接。防御者的目标是选择移动方式,使得在回合结束时,被宣布的银行里有一名侦探。如果在回合的所有移动结束后,被宣布的银行里没有侦探,攻击者立即赢得游戏。否则,防御者成功防守该回合,并进入下一回合。如果防御者能成功防守一年(365 回合),他们就赢得游戏。在游戏过程中,每名侦探的位置对攻击者和防御者都是已知的。
你需要编写的模拟程序的目标是明智地选择一个角色,以便你能赢得游戏。
输入格式
第一行包含值 $B$ 和 $D$ ($4 \le B \le 100, 0 \le D \le B$),分别表示银行数量和侦探数量。银行由整数 $0, 1, \dots, B-1$ 标记。接下来的 $B-1$ 行,每行包含一对整数 $b_i$ 和 $c_i$ ($0 \le b_i, c_i \le B-1$),表示两家靠近的银行 $b_i$ 和 $c_i$ 之间的连接。
输出格式
读取输入后,如果你选择攻击,则打印一行字符串 ATTACK。否则,打印一行字符串 DEFEND,并在下一行打印 $D$ 个不同的索引(以任意顺序),表示侦探最初所在的银行。其余的交互过程将以交互方式进行。
交互
该模拟在所谓的交互模式下进行评估,这意味着接收到的输入取决于迄今为止产生的输出。裁判的输出是模拟的输入,反之亦然。
在打印对裁判输入的每次响应后,模拟程序必须刷新输出缓冲区。例如,在 C++ 中可以使用 fflush(stdout) 或 cout.flush(),在 Java 中使用 System.out.flush(),或者在 Python 中使用 stdout.flush()。此外,它永远不应尝试读取超过保证准备好的输入数据,因为这可能导致程序无限挂起。特别要注意,不要调用类似 scanf("%d ") 或 scanf("%d\n") 的函数,因为这些格式会尝试扫描后续的任何空白字符。相反,只需使用不带尾随空白字符的 scanf("%d")。
在你选择角色并打印相应输出后,以下交换过程将重复进行最多 365 次:攻击者输出他们选择攻击的银行索引 $0 \le v \le B-1$。然后,防御者输出一个整数 $k$,接着输出 $k$ 对 $b_i, c_i$ ($0 \le b_i, c_i \le B-1$),每一对代表一名侦探从银行 $b_i$ 到银行 $c_i$ 的移动。侦探只能沿着靠近银行之间的连接移动。攻击者通过输出 $-1$ 来结束攻击序列。防御者可以通过结束程序来认输。
在此交换中,一方的输出始终是另一方的输入。
样例
样例输入 1
4 3 0 1 0 2 0 3 2 3 -1
样例输出 1
DEFEND 0 1 2 0 2 1 0 0 3
样例输入 2
4 1 0 1 0 2 0 3 0 1 0 1
样例输出 2
ATTACK 1 2
说明
为清晰起见,上述数据是交错显示的,以说明模拟程序与裁判之间的交互顺序。请注意,实际数据中不会有空行,模拟输出中也不得有任何空行。