[WFOI - 02] I wanna reverse to reserve(翻转)
题目背景
> 君子不器
“我最擅长解谜了,你说是吧,kid。”
“嗯...”
题目描述
kid 走进了一个 $n$ 行 $m$ 列的矩阵,**不**保证矩阵中有 $n$ 个数字 $1$,$n$ 个数字 $2$,$\dots$ , $n$ 个数字 $m$ 但 $n,m$ 均为偶数。
现有两种改变矩阵的方式:
- 选择任意一行,将这一行上的数翻转;
- 选择任意一列,将这一列上的数翻转。
每次操作可以选择任意一种方式。
现在需要通过若干次操作,将矩阵变为:
$$
n\;行\left\{
\begin{array}{l}
1\quad2\quad3\quad\cdots\quad m\\
\\
1\quad2\quad3\quad\cdots\quad m\\
\\
\cdots\\
\\
1\quad2\quad3\quad\cdots\quad m\\
\end{array}
\right.
$$
这样才会出现下一个存档点。
你需要帮 kid 解决这个问题。
你只需要给出答案,剩下的操作就交给 Uvocde 吧!
输入输出格式
输入格式
第一行两个正整数 $n$ 和 $m$,以下 $n$ 行,每行 $m$ 个正整数,表示该矩阵。
输出格式
第一行一个字符串,若不可能有可行的操作方式,则输出 `NO`,否则输出 `YES`;
如果输出 `YES`,下一行输出一个非负整数 $ans$,表示一种共需要 $ans$ 次操作。接下来输出 $ans$ 行,每行一个字符和一个数 $k$(中间有空格),这个字符表示这一次操作是翻转行还是翻转列,若是对某一行进行翻转则为 `0`,若翻转某一列则为 `1`,$k$ 表示翻转第几行或是第几列。
若存在可行方案,则只需输出一组可行解即可(不需要使 $ans$ 最小),但你要使 $ans \le n \times m$。
本题采用 $\text{SPJ}$,只要翻转操作正确即可给分。
输入输出样例
输入样例 #1
2 4
1 2 3 4
4 3 2 1
输出样例 #1
YES
1
0 2
输入样例 #2
2 4
1 2 3 4
4 1 3 2
输出样例 #2
NO
说明
**【数据范围】**
**本题采用 Subtask 捆绑测试**。
- $\texttt{Subtask \#0 (20pts)}$:最多只有 $2$ 个数不在规定位置上;
- $\texttt{Subtask \#1 (20pts)}$:$n=2$;
- $\texttt{Subtask \#2 (20pts)}$:$m=2$;
- $\texttt{Subtask \#3 (40pts)}$:$1\le n\le 100$,$1\le m\le 100$;
全部数据满足 $1\le n\le 100$,$1\le m\le 100$。