杰克是一位科学家。正如你可能意识到的那样,这意味着他不太关注自己日常的穿着。他也是一个男人,这意味着他知道的颜色名称不超过六种,分不清本白色(ecru)和白色,并且只把梅红色(plum)与水果联系在一起。但今天他要出发去参加一个会议。他刚刚从洗衣机里拿出一堆单只的袜子,必须将它们配对。他能说出哪只袜子和哪只袜子相似,并且他只能将看起来相似的袜子配对。然而,许多袜子都与许多其他袜子相似。更糟糕的是,相似关系并不一定具有传递性。例如,对杰克来说,蓝色看起来与海绿色相似,海绿色与绿色相似,但杰克能区分蓝色和绿色,并认为它们不相似。
杰克想知道是否恰好只有一种方法可以将他的所有袜子配对。请通过编写一个合适的程序来帮助他。不用担心:他虽然可能是个科学家,但他不会穿着袜子配凉鞋。
输入格式
输入包含多组测试数据。输入的第一行包含一个正整数 $Z \le 50$,表示测试数据的组数。接下来是 $Z$ 组测试数据。
每组测试数据的第一行包含两个由单个空格分隔的整数 $n$ 和 $m$,其中 $1 \le n \le 1000$ 且 $0 \le m \le 10000$。$n$ 为偶数,表示袜子的数量;它们从 $1$ 到 $n$ 进行编号。
接下来的 $m$ 行,每行包含两个由单个空格分隔的数字 $a_i \neq b_i$,表示袜子 $a_i$ 和 $b_i$ 相似。每个相似对恰好出现一次,即如果出现了 $(a_i, b_i)$,那么在此后的列表中既不会出现 $(a_i, b_i)$,也不会出现 $(b_i, a_i)$。
输出格式
对于每组测试数据,你的程序应该检查是否存在恰好一种将所有这些袜子配对的方法。
如果不是,则输出一行 NO。
否则,应在第一行输出 YES,随后输出 $n/2$ 行,每行包含一对配对的袜子,两数之间用单个空格分隔。
配对的输出应按排序后的顺序排列,即对于每对 $(c, d)$,应满足 $c < d$;且对于任意两个相邻的配对 $(c, d)$ 和 $(e, f)$,应满足 $c < e$。
样例
输入样例 1
2 4 4 1 2 2 3 3 4 4 1 4 3 1 2 2 3 3 4
输出样例 1
NO YES 1 2 3 4