允许交换的限制是:只在相同的 ai 分组内任意交换 s 的字符。 因此,每个分组内 s 的字符可以任意重排。要让重排后的 s 与 t 同构(即 ti 是 si 的大写),等价于:
给定一个长度为n的仅由小写字母组成的字符串s,一个长度为n的仅由大写字母组成的字符串t,以及一个长度为n的数组{a1,a2,...,an} (ai∈{0,1})。
对于任意两个不同的下标1≦i<j≦n,如果ai=aj,则允许将字符串s中下标为i与j的字符交换。
如果可以通过上述交换,使得对所有1≦i≦n都有ti是si的对应大写字母,则称s与t是同构的。你的任务是判断它们是否同构。
每个测试文件均包含多组测试数据。第一行输入一个整数T(1≦T≦104)代表数据组数,每组测试数据描述如下:
第一行输入一个整数n(1≦n≦2×105),表示字符串和数组的长度;
第二行输入n 个整数a1,a2,...,an(ai∈ {0,1}),表示限制数组;
第三行输入一个长度为n的仅含小写字母的字符串s;
第四行输入一个长度为n 的仅含大写字母的字符串t。
除此之外,保证单个测试文件的n之和不超过2×105。
对于每一组测试数据,新起一行输出Yes,如果字符串s能通过允许的交换与t同构,否则输出No
输入
2
6
0 1 0 1 0 1
abccba
CAACBB
3
0 0 1
abc
AAC
输出
Yes
No
说明
下方所述的集合均指多重集合(不去重)。
在对于第一组测试数据,a将位置分为两组:
ai=0的位置{1,3,5},s中对应字符为{a,c,b},其大写集合为{A,C,B};t在这些位置上的字符为{C,A,B} 集合相同,可以通过组内重排匹配;
ai=1的位置{2,4,6},s中对应字符为{b,c,a},其大写集合为{B,C,A};t在这些位置上的字符为{A,C,B}, 集合也相同。
因此答案为Yes。
对于第二组测试数据,ai=0的位置为{1,2},s的大写集合为{A,B},而t在这些位置的集合为{A,A},不匹配,因此无法同构。