你正在指挥一场宏大而不断演变的交响乐。乐团由若干乐手组成,每位乐手演奏一个特定的谐波频率(用非负整数表示)。初始时,舞台完全空无一人。经过 $n$ 个连续的步骤,每一步执行一个动作来改变阵容。对于每个步骤 $i = 1, 2, \dots, n$,执行一个操作:
- 如果操作为
+(进入):一位新乐手加入乐团。你必须决定他们要演奏的精确频率 $b_i$。 - 如果操作为
-(退出):一位乐手离开舞台。你必须选择当前演奏中某位乐手的频率 $b_i$,并让恰好一位演奏该频率的乐手停止演奏。
在每一步,演出都以“幻音”为锚点。由于交响乐独特的声学效果,幻音永远不会被舞台上的任何人实际演奏。相反,它的音高始终由当前演奏中缺失的最低频率决定。幻音的音高在数学上定义为 mex(最小未出现值)。设 $S$ 是一个非负整数多重集,表示乐团当前演奏的频率集合。最小未出现值 $\operatorname{mex}(S)$ 定义为最小的非负整数 $x$,使得 $x \notin S$。
在第 $i$ 个动作之后,要求幻音必须正好以 $a_i$ 的频率共鸣。
你的任务是判断是否存在一个有效的选定频率序列 $b_1, b_2, \dots, b_n$,能够完美编排每一步所需的幻音进展,如果存在则构造出这样一个序列。
输入格式
本题包含多个测试用例。输入的第一行包含一个整数 $t$($1 \le t \le 3 \cdot 10^5$),表示测试用例的数量。
对于每个测试用例,每场演出用三行描述:
- 第一行包含一个整数 $n$($1 \le n \le 5000$),表示演出中连续的步骤总数。
- 第二行包含一个长度为 $n$ 的字符串 $op$,仅由字符
+和-组成。$op_i$ 表示第 $i$ 个动作的性质:+表示乐手进入,-表示乐手退出。 - 第三行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$($0 \le a_i \le n$),表示第 $i$ 个动作后幻音必须达到的精确音高。
保证所有演出的 $n^2$ 之和不超过 $5000^2$。
输出格式
对于每场演出,按如下方式输出结果:
如果不可能编排所需的幻音进展,则输出一行,包含单词 NO。
否则输出两行:
- 第一行必须包含单词
YES; - 第二行必须包含 $n$ 个非负整数 $b_1, b_2, \dots, b_n$,表示在每个相应步骤中进入或退出的乐手演奏的具体频率。
每个频率 $b_i$ 必须完全满足题目描述的声学约束和操作规则。你可以输出任何有效的非负整数,只要它可以用标准的 64 位有符号整数表示。
如果存在多个满足演出的有效频率序列,你可以输出其中任意一个。
样例
输入格式 1
4 2 ++ 0 2 3 +++ 0 1 3 3 +-+ 1 0 2 6 ++-+-+ 0 2 0 0 0 1
输出格式 1
YES 1 0 YES 2 0 1 NO YES 1 0 0 7 1 0
说明
样例 1 中有四个测试用例。
- 在第一个测试用例中,插入 $1$ 保持 mex(幻音)为 $0$,然后插入 $0$ 使 mex 变为 $2$。
- 在第二个测试用例中,插入 $2,0,1$ 使得 mex 序列为 $0,1,3$。
- 在第三个测试用例中,第一个操作后 mex 为 $1$,强制插入 $0$;删除它后,再进行一次插入无法使 mex 变为 $2$,因此答案为
NO。 - 在第四个测试用例中,输出的值使得多重集演变,mex 序列为 $0,2,0,0,0,1$。