俄罗斯方块
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

俄罗斯方块是一个十分古老的游戏,xhy 在小时候十分爱玩,以至于他十分擅长俄罗斯方块。有一天,xhy 觉得俄罗斯方块对他来说太过于简单了,他发明出来这样一个游戏。

游戏中初始有一个 n\times n 大小的矩阵,每个小方格大小为 1 \times 1 ,矩阵的第 i 行,第 j 列的格子被编号为 (i, j) (1 \leq i, j \leq n),矩阵的左上角为 (1, 1),右下角为 (n, n) ,同时玩家拥有宽为 1 ,长在 [1, n] 范围内的矩形,每个长度的矩形各有两个。(例如当 n = 4 时,玩家拥有 21 \times 1 大小的矩形, 21 \times 2 大小的矩形, 21 \times 3 大小的矩形, 21 \times 4 大小的矩形)

玩家的胜利条件是将这些矩形铺在 n\times n 大小的矩阵中,使得每个大小为 1 \times 1小方格都至少被一个矩形覆盖,矩形可以重叠放置

但是 xhy 觉得这个游戏太简单了,于是游戏开始后,xhy 拿了一块 1 \times 1 大小的矩形,放在了 (x, y) 处,这时他突然想起他的金工实习车工作业没有完成,他立刻拿走了一块 1 \times n 大小的矩形作为他的金工实习作业并且离开了,现在只剩下了你一个人,请问你能否通过剩下的矩形和他已经放置好的1 \times 1 大小的矩形,将这个 n\times n 大小的矩阵完全覆盖,如果能够做到的话,请输出任意一种方案。(完全覆盖的定义为每个大小为 1 \times 1小方格都至少被一个矩形覆盖,矩形可以重叠放置

形式化地说,游戏中初始有一个 n\times n 大小的矩阵,每个小方格大小为 1 \times 1 ,矩阵的第 i 行,第 j 列的格子被编号为 (i, j) (1 \leq i, j \leq n),矩阵的左上角为 (1, 1),右下角为 (n, n) ,初始在 (x, y) 处被放置了一块 1 \times 1 大小的矩形,你有另外的 1 块大小 1 \times 1的矩形,1 块大小 1 \times n 的矩形,以及大小为 1 \times k (1 < k < n) 的矩形各 2 块。你需要将每个小矩形水平或垂直地放入矩阵中,使得矩阵中每个格子都至少被一个矩形覆盖,请输出任意一种方案。

输入描述:

输入第 1 行包含 3 个正整数 n, x, y ,代表矩阵的大小, xhy 放置的 1 \times 1 大小的矩形所在的位子。(2 \leq n \leq 50, 1 \leq x, y \leq n)

输出描述:

输出第 1 行包含一个字符串,若有解输出 “Yes”, 否则输出 “No”。(不含引号)

若有解,接下来 2 \times n - 2 行,每行用空格隔开输出 4 个整数 len, x, y, target,代表一个长为 len 的矩形,矩形左上角被放置在 (x, y) 处。当矩形是横向放置时,target = 1, 否则 target = 0

例如,若将一个长度为 3 的矩形覆盖在(2, 3), (2, 4), (2,5)上时,输出的这一行为 “3 2 3 1”。(不含引号)

若将一个长度为 4 的矩形覆盖在(4, 3), (5, 3), (6,3), (7,3)上时,输出的这一行为 “4 4 3 0”。(不含引号)
示例1

输入

复制
2 2 1

输出

复制
Yes
2 1 1 1
1 2 2 0
示例2

输入

复制
5 4 2

输出

复制
Yes
5 1 1 0
3 1 2 0
1 5 2 0
3 1 3 0
2 4 3 0
4 1 4 0
4 1 5 0
2 5 4 1

说明

样例 2 解释:



图中每个颜色单独的联通块为一个矩形。