#P16329. [Ucpc2024初赛]种树
[Ucpc2024初赛]种树
题目描述
Seungyeon 想在无限方格中种树。她会选择若干格子撒下种子。种子具有神奇的力量,会根据周围种子的分布长成苹果树或桃树。
若两个都种有种子的格子共用一条边,则称这两颗种子相邻。
- 相邻种子数量为偶数的种子会长成苹果树;
- 相邻种子数量为奇数的种子会长成桃树。
例如,下图种下了 颗种子。蓝色箭头表示相邻关系。中央种子与 颗种子相邻,因此会长成桃树。

最终会得到 棵苹果树和 棵桃树。

所有种子必须在方格中连通。也就是说,对于任意两颗种子,都必须能够只经过相邻种子从其中一颗移动到另一颗。下面的种植方式不合法。

现在希望种出恰好 棵苹果树和 棵桃树。请判断是否可行;若可行,输出一种种植方案。
输入格式
第一行包含两个非负整数 。
输出格式
第一行:若可以构造,输出 YES;否则输出 NO。
若可以构造,继续输出:
- 第二行输出网格的行数 和列数 ;
- 接下来 行,每行输出一个长度为 的字符串。
字符含义如下:
O:该格子中有种子;.:该格子中没有种子。
输出的种子格必须全部连通,并且最终恰好有 棵苹果树和 棵桃树。
样例 1
输入
3 2
输出
YES
3 3
.OO
OOO
...
样例 2
输入
1 0
输出
YES
1 1
O
样例 3
输入
7 0
输出
YES
3 3
.OO
OOO
OO.
样例 4
输入
8 0
输出
YES
4 4
....
.OOO
.O.O
.OOO
样例 5
输入
9 0
输出
NO
样例 6
输入
0 7
输出
NO