[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$。