切塞纳蒂科(Cesenatico)的主广场上有一个五彩缤纷的摩天轮,这是该市的地标性景点之一。在冬季,摩天轮被拆卸并存放在仓库中,但现在夏天快到了,终于到了重新组装它的时候了!零件刚刚运抵广场,在你的帮助下,我们准备将它们组装在一起。
在你面前有 $N$ 个独立的座舱,需要以环形方式连接在一起以组成摩天轮。座舱的编号为从 $0$ 到 $N - 1$,但不一定按照它们应当连接的顺序排列。
每个座舱都配有一个特殊的接头,用于按顺时针方向连接到下一个座舱。每个接头有以下两种可能类型之一:
[+]型:只能用于连接到编号更高的座舱;[-]型:只能用于连接到编号更低的座舱。
在下面的示例中,座舱 2 具有 [+] 型接头。这意味着顺时针方向的下一个座舱必须是座舱 3 或座舱 4。
图 1:$N = 5$ 且有五个独立的座舱,每个座舱都有一个 [+] 或 [-] 型的接头。
给你座舱的数量及其接头类型。你的任务是确定是否可以将所有 $N$ 个座舱组装成一个摩天轮。如果可以,你还需要找到座舱在摩天轮上出现的一种顺序。
图 2:一个可以使用上面所示的五个座舱组装而成的有效摩天轮。
图 2 展示了由图 1 中所示的五个座舱组装而成的一个有效摩天轮。
形式上,一个有效的座舱顺序是一个由数字组成的序列 $C_0, C_1, \dots, C_{N-1}$,满足以下性质:
- 从 $0$ 到 $N - 1$ 的每个数字在序列中恰好出现一次。
- 对于每个 $0 \le i \le N - 2$,座舱 $C_{i+1}$ 必须满足座舱 $C_i$ 的接头类型所施加的条件。也就是说,如果座舱 $C_i$ 的接头类型是
[+],则 $C_{i+1} > C_i$;如果是[-],则 $C_{i+1} < C_i$。 - 此外,座舱 $C_0$ 必须满足座舱 $C_{N-1}$ 的接头类型所施加的条件。
输入格式
输入包含两行。
第一行包含一个整数 $N$,表示座舱的数量。
第二行包含一个长度为 $N$ 的字符串 $S$,由字符 + 和 - 组成。如果 $S_i = \text{'+'}$,则座舱 $i$ 的接头类型为 [+]。如果 $S_i = \text{'-'}$,则座舱 $i$ 的接头类型为 [-]。
输出格式
如果不存在满足约束条件的顺序,输出 NO。
否则,输出 YES,并在下一行输出 $N$ 个整数,表示有效摩天轮上座舱按顺时针方向排列的索引(可以从任意索引开始)。如果存在多个解,你可以输出其中任意一个。
数据范围
- $3 \le N \le 300\,000$。
- $S_i = \text{'+'}$ 或 $\text{'-'}$。
子任务
你的程序将在分为若干个子任务的多个测试用例上进行测试。要获得某个子任务的分数,你必须正确解决其中包含的所有测试。
- 子任务 0[0 分]:样例。
- 子任务 1[16 分]:$N = 3$。
- 子任务 2[13 分]:字符串 $S$ 中恰好有一个
+。 - 子任务 3[24 分]:字符串 $S$ 中的字符
+和-交替出现;也就是说,对于每个 $0 \le i \le N - 2$,都有 $S_i \ne S_{i+1}$。 - 子任务 4[23 分]:$N \le 1000$。
- 子任务 5[24 分]:无附加限制。
样例
输入样例 1
3 +++
输出样例 1
NO
输入样例 2
5 +-+--
输出样例 2
0 3 2 4 1
输入样例 3
7 ------+
输出样例 3
NO
输入样例 4
8 +-+-+-+-
输出样例 4
3 2 4 6 7 1 0 5
输入样例 5
11 +++--+-++--
输出样例 5
10 0 5 8 9 4 2 6 3 1 7
说明
第一个样例。我们有三个座舱。由于所有接头都是 [+] 类型,我们必须安排座舱,使得每个座舱后面都紧跟一个编号更高的座舱。可以证明,这三个座舱的任何顺序都无法满足该条件,因此答案为 NO。
第二个样例。参见题目描述中的图 1 和图 2。我们有五个座舱。我们必须按顺时针方向安排它们,使得:
- 座舱 0 和 2(接头类型为
[+])后面紧跟一个编号更高的座舱; - 座舱 1、3 和 4(接头类型为
[-])后面紧跟一个编号更低的座舱。
满足所有这些条件的摩天轮如下图所示。对于 [+] 型接头,要求满足,因为 $0 < 3$ 且 $2 < 4$。对于 [-] 型接头,要求满足,因为 $1 > 0$、$3 > 2$ 且 $4 > 1$。对应于该摩天轮有多种输出:除了 0 3 2 4 1 之外,你还可以输出 3 2 4 1 0、2 4 1 0 3、4 1 0 3 2 或 1 0 3 2 4。
图 3:第二个样例的摩天轮(此图与图 2 相同)。
第三个样例。我们有七个座舱:除了最后一个接头是 [+] 类型外,所有接头都是 [-] 类型。因此,我们必须安排座舱,使得除了座舱 6 后面必须紧跟一个编号更高的座舱外,每个座舱后面都紧跟一个编号更低的座舱。可以证明不存在这样的顺序,因此答案为 NO。
下图展示了对应于最后两个样例输出的摩天轮。
图 4:第四个样例的摩天轮。
图 5:第五个样例的摩天轮。