系ぎて
题号:NC312325
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小红正在一块 n 行 m 列的电路板上修复信号。电路板的每个格点上可能标记着数字 \texttt{0}\texttt{1} 或 \texttt{2}。其中,标记为 \texttt{1} 的格点恰好有两个,标记为 \texttt{2} 的格点也恰好有两个,其余格点均为 \texttt{0}

\hspace{15pt}小红需要规划两条路径,分别连接两个 \texttt{1} 信号点和两个 \texttt{2} 信号点。
\hspace{15pt}一条合法的路径定义为:
\hspace{23pt} \bullet 路径由一系列相邻的格子组成(上、下、左、右)。
\hspace{23pt} \bullet 两条路径不能经过同一个格子。
\hspace{23pt} \bullet 每条路径不能经过不属于该路径的信号点(例如,连接 \texttt{1} 的路径不能经过任何标记为 \texttt{2} 的格点)。
\hspace{23pt} \bullet 路径可以经过标记为 \texttt{0} 的格点,每个 \texttt{0} 格点最多只能被一条路径使用一次。

\hspace{15pt}请你帮小红判断是否存在这样的两条路径。

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 10^4\right) 代表数据组数,每组测试数据描述如下:

\hspace{15pt}第一行输入两个整数 n,m\left( 2 \leqq n, m \leqq 10^5 \right),表示网格的行数和列数。
\hspace{15pt}接下来 n 行,每行输入一个长度为 m 的字符串,由字符 \texttt{0}\texttt{1}\texttt{2} 组成,表示电路板的每个格点上的标记。保证 \texttt{1}\texttt{2} 的数量恰好为 2

\hspace{15pt}除此之外,保证单个测试文件的 n \times m 之和不超过 10^5

输出描述:

\hspace{15pt}对于每组测试数据,新起一行输出 \texttt{YES} 或 \texttt{NO},表示是否存在满足要求的两条路径。
示例1

输入

复制
3
2 2
12
21
2 2
11
22
3 3
010
212
000

输出

复制
NO
YES
YES

说明

\hspace{15pt}对于第一组测试数据,两个 \texttt{1} 和两个 \texttt{2} 呈对角分布,连接其中一对必会阻断另一对,无法构造不相交路径。

\hspace{15pt}对于第二组测试数据,两个 \texttt{1} 都在第一行,两个 \texttt{2} 都在第二行,可以分别在各自行内水平连接。

\hspace{15pt}对于第三组测试数据,连接了两个 \texttt{1} 后,两个 \texttt{2} 可以从下方绕成一个连通的路径。

备注:

别笑,你来也过不了第二关