JOI 岛是一个观光区,整座岛屿被指定为自然公园。
JOI 岛上有 个地点和若干条道路。这些地点从 到 编号。每条道路连接两个不同的地点,且可双向通行。每个地点最多连接 7 条道路。任意两个不同地点之间至多仅有一条道路相连。只要经过若干条道路,我们便可从任意地点到达其他任意地点。
你和你的朋友 IOI 女士将共同调查 JOI 岛。为高效完成调查,你需要弄清 JOI 岛的结构。JOI 岛十分危险,因为岛上栖息着许多野生动物。由于 IOI 女士拥有出色的运动能力,她将负责实地探索 JOI 岛,而你则根据 IOI 女士的报告来确定 JOI 岛的结构。
你将提供两个地点 、 以及若干中间地点给 IOI 女士,并询问:若仅允许经过给定的中间地点,是否可能从地点 到达地点 ?随后,IOI 女士将探索 JOI 岛,并将结果报告给你。
由于调查时间不能过长,查询次数应小于或等于 45000。
任务
编写一个程序,与 IOI 女士通信并确定 JOI 岛的结构。
实现细节
你需要编写一个程序,实现确定 JOI 岛结构的方法。你的程序应当声明函数 void Answer(int A, int B); 和 int Ask(int A, int B, int Place[]);,并且使用不低于 C++17 的语言标准提交试题。
你的程序应实现以下函数:
你的程序应通过调用以下函数,输出其确定的 JOI 岛结构:
此外,你的程序可调用以下函数:
若上述条件未被满足,你的程序将被判定为 Wrong Answer[4]。然而,若数组 Place[] 的长度不等于 ,该函数的行为无法保证。
函数 Ask 的调用次数不得超过 45000 次。若超出,你的程序将被判定为 Wrong Answer[5]。
当函数 Detect 执行完毕后,若存在某条道路未作为先前对函数 Answer 的调用参数出现,则你的程序将被判定为 Wrong Answer[6]。
你的程序可实现其他函数供内部使用,或使用全局变量。你的程序不得使用标准输入和标准输出,也不得通过任何方式与其他文件通信。
编译与测试运行
你可以从竞赛网页下载一个归档文件,其中包含一个用于测试你程序的示例评测程序。该归档文件还包含你的程序的一个示例源代码文件。
一个示例评测程序由一个源文件组成,该文件名为 grader.c 或 grader.cpp。例如,如果你的程序名为 park.c 或 park.cpp,你可以运行以下命令来编译你的程序。
当编译成功后,将生成可执行文件 grader。
请注意,实际的评测程序与示例评测程序不同。示例评测程序将以单个进程运行,从标准输入读取输入数据,并将结果写入标准输出。