魔法棋盘
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
Special Judge, 64bit IO Format: %lld

题目描述

小 P 得到了一块神秘的魔法棋盘。棋盘是一个大小为 1000 × 1000的网格图,格子黑白相间,其中左上角 (1,1)白色。换句话说,格子行与列的奇偶性相同时为白色,否则为黑色。


每次启动魔法棋盘,都需要完成一个挑战:在棋盘上选出一个连通块,其中包含恰好 a 个白格子和 b 个黑格子。


当两个格子共享一条边时,视为它们相邻;如果一个格子集合中任意两个格子都可以通过若干次相邻移动互达,则该集合为一个连通块


小 P 发现有些情况下根本无法找到满足条件的连通块,因此他希望你判断:


  • 给定的 ab 是否可行;


  • 若可行,请给出任意一组满足条件的构造方案。

输入描述:

第一行输入一个整数 t (1\le t\le 10^4),表示测试数据的组数。


接下来 t 行,每行输入两个整数 a, b (0 \le a,b \le 2 \times 10^51 \le a + b \le 2 \times 10^5),分别表示连通块的白格子数量和黑格子数量。


保证所有测试用例中 a+b 的总和不超过 10^6

输出描述:

对于每组数据:


  • 若存在合法构造,输出一行YES,随后输出 a + b 行,每行两个整数 x,y (1 \le x,y \le 1000),表示选择的格子坐标。


  • 若不存在合法构造,输出一行NO。


若存在多种可行方案,以任意顺序输出任意一种可行方案即可。


你可以以任意大小写输出YES和NO(例如,字符串yEs、yes、Yes和YES将被识别为肯定的回答)。

示例1

输入

复制
3
1 1
0 1000
5 4

输出

复制
YES
1 1
1 2
NO
YES
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3

备注:

对于第三个测试用例,下图中红色边界内的格子构成了满足条件的连通块:



红色边界内的连通块共 5 个白色格子,4 个黑色格子,符合要求。