P1112

Jumping monkey

Jumping monkey

你是一名在丛林中追逐猴子的猎人。猴子藏在某棵树的枝叶后,你无法看到它的位置。每次你可以瞄准一棵树射击;如果猴子正藏在这棵树上,它就会被立即击中。否则,猴子会趁你重新装弹时跳到一棵与当前树相邻的树上,而你无法观察到它的移动。每次射击后,猴子都不会停留在原来的树上。

你需要判断是否存在一个射击序列,使得无论猴子的初始位置在哪里、之后如何跳跃,都一定能够击中它。如果存在,请找出射击次数最少的序列;猴子可能预知你的下一个射击目标,并始终采用对自己最有利的移动方式。

例如,当丛林中只有两棵相邻的树时,连续两次射击同一棵树即可保证击中猴子:如果第一次没有击中,猴子原本必然位于另一棵树上,随后只能跳到第一次射击的树上,因此第二次射击一定成功。

但并非所有丛林都存在必胜方案。例如,当有三棵树且它们两两相邻时,无论射击哪棵树,猴子都可以始终保留两个可能的位置,因此无法保证击中它。

输入格式

输入包含多组测试数据,相邻两组测试数据之间由一个空行分隔。

每组测试数据的第一行包含两个整数 nn 和 mm,分别表示树的数量和树之间的相邻关系数。

接下来 mm 行,每行包含两个互不相同的整数,表示对应的两棵树相邻。树的编号为 00 至 n−1n-1。每对相邻关系只会出现一次,两个编号的顺序没有意义。

保证不存在树与自身相邻的情况,且任意两棵树之间都存在路径。

输入以仅包含两个 00 的一行结束,该行之前同样有一个空行。

输出格式

对于每组测试数据,输出一行。

如果不存在能够保证击中猴子的射击序列,输出 Impossible。

否则,输出最短射击序列,格式为 LL: V1 V2 … VLV_1\ V_2\ \ldots\ V_L。其中 LL 表示射击次数,ViV_i 表示第 ii 次射击的树的编号,各编号之间用单个空格分隔。

如果存在多个最短射击序列,输出字典序最小的一个。对于两个不同的序列,在第一个不同的位置上,编号较小的序列字典序更小。

样例输入

样例一

2 1
0 1

样例二

3 3
0 1
1 2
2 0

样例三

4 3
0 1
2 3
1 3

样例输出

样例一

2: 0 0

样例二

Impossible

样例三

4: 1 3 3 1

数据范围

  • 1≤n≤211\le n\le 21;
  • 树的编号范围为 00 至 n−1n-1;
  • 每条相邻关系连接两棵不同的树,且不会重复出现;
  • 整个树林构成一张连通的无向图。

来源与许可

本题题面与测试数据整理自 BZOJ。

样例 1

输入

2 1
0 1

输出

2: 0 0

样例 2

输入

3 3
0 1
1 2
2 0

输出

Impossible

样例 3

输入

4 3
0 1
2 3
1 3

输出

4: 1 3 3 1