我决定开启一个关于加密货币、深度学习、自动驾驶汽车以及移动语音助手(稍后再决定具体做什么)的新奇项目。我已经拥有了一个由 $n$ 名充满希望的软件工程师组成的团队,现在最后需要做的事情就是从中选出一名技术主管(techlead)。
除了技术主管外,所有工程师都应被分成若干个由一名或两名工程师组成的团队(最近我读了《敏捷软件开发:结对编程》一书的前十章,发现其中描述的技术非常有用!)。对于每一对工程师,我都知道他们是否能有效地进行互动。
如果满足以下条件,则技术主管的选择和团队分配是有效的:任何双人团队中的两名工程师都能有效互动,且在任何团队中,至少有一名工程师能与技术主管有效互动。
我希望你尽快找到一个合适的公司结构,以便我们的初创公司能够进行 IPO 或 ICO(目前还不确定这意味着什么,现在没时间管这些),或者确定这是不可能的,那么成功与荣耀的世界就与我无缘了(至少今天如此)。
输入格式
输入的第一行包含两个整数 $n$ 和 $m$ ($2 \le n \le 1000, 0 \le m \le 10\,000$),分别表示软件工程师的人数和成功互动的对数。
接下来的 $m$ 行,每行包含两个整数 $u_i, v_i$ ($1 \le u_i, v_i \le n, u_i \neq v_i$),表示形成有效互动对的工程师编号。
保证所有无序的工程师对都是不同的。
输出格式
如果无法创建满足我要求的公司结构,请输出一个单词 “No”。
否则,在第一行输出单词 “Yes”。
在第二行输出两个整数 $l, k$ ($1 \le l \le n, \lceil \frac{n-1}{2} \rceil \le k \le n-1$),分别表示技术主管的编号和团队的数量。
接下来的 $k$ 行,每行应包含两个整数 $t_1$ 和 $t_2$ 来定义一个团队。如果团队由两名成员组成,$t_1$ 和 $t_2$ 应为组成该团队的工程师编号;否则,$t_1$ 应为团队中唯一一名工程师的编号,$t_2$ 应为 $-1$。
如果有多个正确答案,输出其中任意一个即可。
样例
样例输入 1
5 4 1 2 2 3 3 4 4 5
样例输出 1
Yes 3 2 2 1 4 5
样例输入 2
4 4 1 2 2 3 3 4 4 1
样例输出 2
Yes 1 2 2 3 4 -1
样例输入 3
4 3 1 2 2 3 3 1
样例输出 3
No