小苯的序列染色
题号:NC293552
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小苯有一个长度为 n 的字符串 s,一开始所有数字都是 0。下标从 1 开始。
\hspace{15pt}现在,他可以使用一个字符串 t=\texttt{,来对 s 进行若干次「染色」操作,具体的,小苯可以做以下操作任意次:
\hspace{15pt}\bullet 从 s 中选择一个长度恰好为 3 的连续段 s_i,s_{i+1},s_{i+2}\left(1 \leqq i \leqq n-2\right),并将这三个字符依次赋值为:\texttt{`1'},\texttt{`1'},\texttt{`0'}
\hspace{15pt}换句话说,使用 t 对 s 中长度为 3 的连续段进行覆盖,被覆盖的部分操作后会变成 \texttt{。注意:后来的操作会覆盖先前的操作。
\hspace{15pt}现在小苯想知道,如果给定了一个最终的、仅由字符 \texttt{`0'}\texttt{`1'} 构成的期望结果字符串 s',他想知道 s 能否通过任意次(可以为 0 次)「染色」操作变成 s'。请你帮帮他吧。

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 100\right) 代表数据组数,每组测试数据描述如下:
\hspace{15pt}第一行输入一个整数 n\left(1 \leqq n \leqq 2 \times 10^5\right),表示序列 s 的长度。
\hspace{15pt}第二行输入一个长度为 n,仅由字符 \texttt{`0'}\texttt{`1'} 构成的字符串 s',表示小苯期望的最终结果。

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

输出描述:

\hspace{15pt}对于每组测试数据,新起一行。如果存在一种「染色」方案使得 s 可以变成 s',则输出 \textrm{YES},否则输出 \textrm{NO}
示例1

输入

复制
2
6
111001
5
11100

输出

复制
NO
YES

说明

\hspace{15pt}对于第一组测试数据,可以证明不存在合法的解。 
\hspace{15pt}对于第二组测试数据,其中一种「染色」方案是:首先选择连续段 [1,3]「染色」得到 \texttt{,再选择连续段 [2,4]「染色」得到 \texttt{