CF65E Harry Potter and Moving Staircases

题目描述

### 题意翻译 哈利波特在从管理员费尔奇那里逃走时,丢失了他的隐形衣。寻找一件隐形的物件可不是一件容易的事情。幸运的是哈利有乐意帮助他的朋友们。赫敏·格兰杰读了“隐形衣和关于它们的一切”,以及“最短路径百科全书”,“网络流”,“最长上升子序列”和其他的魔法物品。她已经为在复杂的动态系统(霍格沃茨是其中一个)中的隐形衣开发了一套搜索算法。 霍格沃茨由 n 层组成,这 n 层分别从 1 到 n 标号。一些楼层被楼梯连着。这些楼梯会改变自己一端的位置。通常情况像这样:如果之前连接着 a 层和 b 层,那么它移动后就可能连接 a 层和 c 层或 b层和 c 层,其中 c 层不为 a 层或 b 层。任何情况下楼梯都不能和本身相连。同时可以有多个楼梯连接相同楼层。 现在楼梯的活动十分少。然而,罗恩和赫敏很乐意去在它们上面释放法术来帮助哈利找到隐形衣。为了减少怀疑,三个人计划一个个移动楼梯。在两次移动楼梯中间,哈利可以在楼层上走动,从楼梯上到达另一层来寻找自己的隐形衣。此时可以认为楼梯不会自主移动。 请帮助三人来制定一个搜索的计划。如果有多个不同的方法可以解决问题(不一定是最优情况下),都可以被接受。

输入格式

第一行是两个整数 n 和 m $(1 \le n \le 10^5,0\le m \le 2\times 10^5)$,分别表示楼层数量和楼梯的数量。以下有m行,每行两个数,表示开始阶段一对被楼梯连接的楼层。

输出格式

如果哈利可以搜索所有楼层,在第一行输出 ``YES`` ,否则输出 ``NO``.如果可以搜索所有楼层,那么在第二行输出要移动的楼梯总数。 接下来的输出如下: 哈利的移动 楼梯的移动 哈利的移动 楼梯的移动 $\cdots$ 楼梯的移动 哈利的移动 每一次“哈利的移动”需要按哈利搜索的顺序用一串楼层的形式表现。所有串的元素总数不得超过$10^6$。在输出每一个楼层串时,先输出元素的数量再在同一行内输出被空格分开的每个元素。第一个楼层串的第一个号码应该是1号。除了第一个楼层串之外的任何楼层串都可能会包含0个元素。哈利可以多次访问一些楼层,但必须至少访问1~n中的每个楼层一次。哈利连续搜索的两个楼层必须通过楼梯连接,同时这两个楼层不能相等。 在“楼梯移动”中,应指出这个楼梯的编号(编号是按输入的顺序从1~m依次编号)和它移动后连接的两个楼层(任何顺序都可以)。 任何一个楼梯最多只能移动一次。如果有多组解,输出任意一组均可。