小红的排列构造
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

\hspace{15pt}小红定义一个仅由 \texttt{0}\texttt{1} 两个字符构成的字符串 s 与一个长度为 n 的数组 p匹配,当且仅当满足下列两点:
{\hspace{20pt}}_\texttt{1.}\,s_i=\texttt{1},则数组 \{p_1,p_2,\dots,p_i\} 恰好构成一个排列;
{\hspace{20pt}}_\texttt{2.}\,s_i=\texttt{0},则数组 \{p_1,p_2,\dots,p_i\} 无法构成一个排列。

\hspace{15pt}现在小红给出了一个长度为 n 的字符串 s,请你构造一个长度为 n 的排列 p 使得 sp 匹配;如果不存在这样的排列,请输出 -1

\hspace{15pt}【名词解释】
\hspace{23pt}\bullet\,排列排列是由 1\sim nn 个整数按任意顺序组成的数组,其中每个整数恰好出现一次。

输入描述:

\hspace{15pt}第一行输入一个整数 n\left(1\leqq n\leqq 10^5\right) 表示字符串及排列的长度。 
\hspace{15pt}第二行输入一个长度为 n,仅由 \texttt{0}\texttt{1} 构成的字符串 s

输出描述:

\hspace{15pt}如果不存在满足条件的排列,直接输出 -1;否则,在一行上输出 n 个整数 p_1,p_2,\dots,p_n 表示你构造出的排列。 
\hspace{15pt}如果存在多个满足条件的排列,输出任意一个均可,系统将自动判定其正确性。请注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
示例1

输入

复制
3
001

输出

复制
3 1 2

说明

\hspace{15pt}对于这个样例,
\hspace{23pt}\bullet\,由于 s_0 = {\tt 0},排列的前一项元素无法构成一个排列;
\hspace{23pt}\bullet\,由于 s_1 = {\tt 0},排列的前两项元素无法构成一个排列;
\hspace{23pt}\bullet\,由于 s_2 = {\tt 1},排列的前三项元素构成一个排列;
\hspace{15pt}同时,输出 \{2,3,1\}\{3,2,1\} 等答案也都是合法的。
示例2

输入

复制
4
1110

输出

复制
-1

说明

在此样例中,若存在合法排列,则前三位必须依次形成排列,但第四位又要求整体不形成排列,显然不可能,因此答案为 -1