FBI树
题号:NC285769
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}转译自 [NOIP2004普及组] FBI树 。
\hspace{15pt}对于给定的长度为 2^n ,仅由 \texttt{\texttt{ 组成的字符串 s ,请按下方的规则构造出一棵二叉树 T
\hspace{23pt}\bullet\,记当前子树 T_i 的根节点为 \text{root}_i
\hspace{23pt}\bullet\,记当前子树分得的字符串 s_i 的长度大于 1 ,则将 s_i 从中间分开,分为等长的左右子串 s_{i}'s_{i}''
\hspace{23pt}\bullet\,s_{i}' 递归构造 \text{root}_i 的左子树 T_{i}' ,由 s_{i}'' 递归构造 \text{root}_i 的右子树 T_{i}''

\hspace{15pt}由于难以将整棵树完整的输出,所以我们定义节点的简称:
\hspace{23pt}\bullet\,若当前节点分得字符串仅 \texttt{ 构成,那么该节点简称 \rm B 节点;
\hspace{23pt}\bullet\,若当前节点分得字符串仅 \texttt{ 构成,那么该节点简称 \rm I 节点;
\hspace{23pt}\bullet\,若当前节点分得字符串既包含 \texttt{ 又包含 \texttt{ ,那么该节点简称 \rm F 节点。

\hspace{15pt}你只需要输出所构造二叉树的后序遍历。每一个节点使用简称表示。

输入描述:

\hspace{15pt}第一行输入一个整数 n \left(0 \leq n \leq 10\right) 代表字符串 s 的长度为 2^n
\hspace{15pt}第二行输入一个长度为 2^n ,仅由 \texttt{\texttt{ 组成的字符串 s

输出描述:

\hspace{15pt}在一行上输出一个字符串,代表由字符串 s 构造得到的二叉树的后序遍历。
示例1

输入

复制
3
10001011

输出

复制
IBFBBBFIBFIIIFF

说明

\hspace{15pt}在这个样例中,记某一棵子树 T_i 的根节点的编号为 i ,其子节点的编号为 2 \times i2 \times i + 1 。初始时根节点为 1 ,那么:
\hspace{23pt}\bullet\,节点 1 分得的字符串为 \texttt{ ,简记为 \rm F 节点;
\hspace{23pt}\bullet\,节点 1 的左儿子 2 分得的字符串为 \texttt{ ,简记为 \rm F 节点;
\hspace{23pt}\bullet\,节点 2 的左儿子 4 分得的字符串为 \texttt{ ,简记为 \rm F 节点;
\hspace{23pt}\bullet\,节点 4 的左儿子 8 分得的字符串为 \texttt{ ,简记为 \rm I 节点;
\hspace{23pt}\bullet\,……

\hspace{15pt}最终得到的二叉树如下图所示: