这是一道交互题。
鸿蒙系统是一款全新的面向全场景的分布式操作系统,创造一个超级虚拟终端互联的世界,将人、设备、场景有机地联系在一起,将消费者在全场景生活中接触的多种智能终端,实现极速发现、极速连接、硬件互助、资源共享,用合适的设备提供场景体验。
你也想实现一个可以简易的连接多种终端的系统, 称为Harmini。在Harmini系统中,每个终端被视为一个节点,节点之间的连接被表示为一条边。所有节点相互之间都应该可以通过边连接,但由于技术力的原因,你希望边数尽可能的少。换句话说,Harmini系统可以被抽象为一棵树。
Harmini中的每条边都被分配了一个整数权值,当两个终端$$$u,v$$$进行通讯时,通讯的权值为$$$u,v$$$之间简单路径上的所有边的权值的二进制异或和。
不幸的是,粗心的你将每条边的权值都忘记了。你只能通过尝试通讯两个节点,来获得它们之间的简单路径上的边的权值异或和。出于Harmini的某个bug,只有距离恰好为$$$k$$$的点之间可以进行通讯。
假设Harmini中一共有$$$n$$$个点,你需要在$$$n$$$次询问内获取所有边的权值。
第一行首先输入两个整数$$$n,k$$$ ($$$2\le k \lt n\le 5 \times 10^4$$$),分别代表树的节点数和询问的距离限制。
接下来$$$n-1$$$行,第$$$i$$$行输入两个整数$$$u_i,v_i$$$ ($$$1\le u_i,v_i\le n$$$),代表第$$$i$$$条边连接了节点$$$u_i,v_i$$$。保证输入为一棵树。
你最多可以进行$$$n$$$次询问,询问的格式为"$$$?\ u\ v$$$",表示询问$$$u,v$$$之间的简单路径的边权异或和。你需要保证$$$u,v$$$之间的简单路径的边数恰好为$$$k$$$。根据你的询问,系统将会输出一个整数$$$x$$$ ($$$0\le x \lt 2^{31}$$$),代表询问的结果。
当你计算出结果后,输出一行"$$$!\ w_1\ w_2 \cdots w_{n-1}$$$",其中$$$w_i$$$代表输入的第$$$i$$$条边的权值,权值为$$$[0,2^{31})$$$之间的整数,然后立刻停止程序。
如果没有在$$$n$$$次询问内得到结果的方法,则你可以在任何时间输出一行"! No solution"。
如果你的询问次数超过$$$n$$$,或询问的节点之间简单路径的边数不为$$$k$$$,你将会得到 Wrong Answer 。
为了让系统接收到你的询问,你需要在输出任何询问后立刻清空输出缓存,否则你将得到 Idleness Limit Exceeded 的结果。清空输出缓存可以用以下方法:
8 3 1 2 2 3 3 4 4 5 5 6 7 3 8 4 0 1 0 1 0 0 1
? 3 6 ? 2 5 ? 1 4 ? 7 5 ? 8 6 ? 8 2 ? 7 1 ! 1 0 1 0 1 0 1
| Name |
|---|


