研究一种新的数字信息存储设备。设备上的信息以单元序列的形式存储,每个单元处于“+”或“-”两种状态之一,因此每个单元存储一位信息。
我们将“片段”定义为一组状态相同的相邻单元,其左侧要么没有单元,要么是一个状态相反的单元;其右侧要么没有单元,要么是一个状态相反的单元。
写操作允许选择任意一对长度不同的相邻片段,并将较短片段中所有单元的状态取反,从而将两个或三个相邻片段合并为一个片段。
请编写一个程序,根据给定的初始状态序列和目标状态序列,判断是否可以通过一系列写操作从初始序列得到目标序列。
输入格式
第一行包含一个正整数 $q$,表示测试用例的数量。 接下来的 $q$ 行,每行包含两个由“+”和“-”组成的非空序列 $s_i$ 和 $t_i$,中间用空格隔开,且长度相等。这表示在第 $i$ 个测试用例中,需要判断能否从初始状态序列 $s_i$ 得到目标状态序列 $t_i$。
输出格式
输出应包含 $q$ 行,如果可以从初始状态序列 $s_i$ 得到目标状态序列 $t_i$,则第 $i$ 行输出“Yes”,否则输出“No”。
样例
输入 1
3 ++- +++ ++-- ++++ ++-+--+- ++++++++
输出 1
Yes No Yes
输入 2
3 ++-+-- ++---- ++-+-- +++--- -++- -++-
输出 2
Yes No Yes
子任务
| 子任务 | 分值 | 约束条件 | 依赖子任务 | ||
|---|---|---|---|---|---|
| 1 | 20 | $\sum | s_i | \leqslant 16$,$t_i$ 仅由“+”组成 | – |
| 2 | 30 | $\sum | s_i | \leqslant 1000$,$t_i$ 仅由“+”组成 | 1 |
| 3 | 20 | $\sum | s_i | \leqslant 10^6$,$t_i$ 仅由“+”组成 | 1, 2 |
| 4 | 20 | $\sum | s_i | \leqslant 1000$ | 1, 2 |
| 5 | 10 | $\sum | s_i | \leqslant 10^6$ | 1–4 |