二进制转化
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

Hz 每天都在写cf,这一天他终于感到了无聊,于是他从队友那里得到了一个仅有 '0','1' 两种字符所构成的二进制字符串,并且开始数字符串中 "01" 子串* 和 "10" 子串 的个数。
数完之后他发现 两种类型子串的个数不一样,他感到很不爽,于是他选择了一个区间$[l, r]$,使得区间内的 '0','1' 可以相互转化,他想知道在这样的条件下,能否使得这个二进制串中 "01" 子串和 "10" 子串的个数相等。

* 在字符串  $S$  中,任意满足 $1 ≤ l ≤ r ≤ |S|$  的连续子段  $S[l..r]$  称为子串。

输入描述:

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

第一行给定一个整数 n (1 \leq n \leq 10^6),表示字符串的长度。

第二行给定一个长度为 n 的仅有 '0', '1' 所组成的字符串。

第三行给定两个整数 l, r(1 \leq l \leq r \leq n) .

保证所有的n的总和不超过 10^6

输出描述:

如果两种类型子串的数量相等则输出 "Yes",否则输出 "No"。
示例1

输入

复制
2
1
0
1 1
7
1001010
1 3

输出

复制
Yes
Yes