SP32468 FROGPARTY - Frog Party
题目描述
在一片池塘里,有 $n$ 个睡莲排成一排。青蛙家庭——从左到右编号为 $1$ 到 $n$ 。一只青蛙生活在一片睡莲上。下午,每只青蛙都会回到家里小睡一会儿。他们从午睡中醒来后,已经是傍晚了。青蛙晚上做什么?当然是开派对!幸运的是,青蛙派对不需要任何特殊的准备,所有的青蛙只需在一个小广场集合,派对就可以开始了。
当一只青蛙去参加聚会时,它肯定不想湿漉漉地来。因此,青蛙可能只能通过跳过睡莲来参加聚会。一只青蛙可以自己跳到邻近的睡莲上。然而,当一只青蛙和另一只青蛙跳到同一个睡莲上时,它们会组队——到达的青蛙会跳到另一只的背上,通过共同努力(并略微违反物理定律),它们可以跳到距离2米的睡莲上。一般来说,如果编号为 $x$ 的睡莲上有 $y$ 只青蛙,那么它们便可以跳到编号为 $x - y$ 和 $x+y$ 的莲叶上(跳到 $n$ 个莲叶之外显然是不可行的——因为青蛙会跳进水里淋湿)。当一个睡莲上的青蛙跳到另一个睡莲上时,它们会按照与以前相同的顺序爬到已经存在的青蛙的背上。最重要的是,青蛙礼仪中有一条,青蛙不应该跳到目前没有青蛙的睡莲上。
整个过程可能看起来像这样





你可以想象,当几只青蛙站在另一只青蛙的背上时,可能会很累。青蛙米哈尔显然不想做累人的事情。这就是为什么他想在下一次青蛙会议上提出一系列关于跳跃的建议,这样晚上所有的青蛙都会在一个小平台上相遇,同时没有青蛙爬上米哈尔的背(这基本上意味着没有青蛙能跳到米哈尔目前所在的小平台上)。请你帮帮他!
考虑到莲叶的数量和青蛙的数量 $n$ 和米哈尔居住的莲叶的数量,在经过一系列跳跃后,所有的青蛙最终都会跳到一个莲叶上,而且没有青蛙会跳到目前没有青蛙或有青蛙米哈尔的莲叶上。
输入格式
第一行:一个整数 $T$ ,表示有 $T$ 个测试点。
对于每个测试点:
仅一行:$2$ 个整数 $n$ 和 $m$ ,表示莲叶和青蛙的数量和米哈尔居住的莲叶的数量。
数据保证每个测试点中的 $n$ 之和不超过 $2 \times 10^6$ 。
输出格式
对于每个测试点,如果不存在满足所述标准的有效跳跃序列,则输出 ``NO`` 。否则输出 ``YES`` ,然后描述一个有效的跳跃序列。每次跳跃可以用两个数字来描述,这意味着目前在莲叶 $a$ 上的青蛙应该跳到莲叶 $b$ 上。任何导致青蛙派对可以成功进行的有效跳跃序列都将被接受。
输出非常大。请注意您的运行速度。