2684: 树的序号

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:0 解决:

题目描述

我们可以用下面的方案给二叉树标号:
空树的序号为 0。
只有一个根结点的树序号为 1。
所有包含 m 个结点的二叉树的序号一定比任何一个包含 m+1 个结点的二叉树的序号小。
任何一棵二叉树有 m 个结点,若它的序号为 n,其左子树序号为 L,右子树序号为 R,则所有序号大于 n 且有 m 个结点的二叉树必满足下列条件之一:
——左子树序号大于 L
——左子树序号等于 L 且右子树序号大于 R
前 5 棵二叉树的形状如下:
0       1       2       3       4
        X       X       X       X
                 \     /         \
                  X   X           X
                                   \
                                    X
你的任务就是对给定的序号,输出该序号所对应的二叉树。

输入

包含多组数据,每个数据只有一个单独的整数 n(1<=n<=500,000,000)。当 n=0时表示输入文件结束,但你不必输出 n=0 时的空树。

输出

对每个数据产生一个输出,每个数据仅输出一行,表示对应序号的树。
输出树时使用下列格式:
一棵树若没有子树则输出根:X。
一棵树有左子树 L 和右子树 R 应当输出:(L')X(R'),L'和 R'为序号 L 和 R 对应的二叉树。当然,若 L=0,则输出 X(R');若 R=0,则输出(L')X。

样例输入 复制

1
20
31117532
0

样例输出 复制

X
((X)X(X))X
(X(X(((X(X))X(X))X(X))))X(((X((X)X((X)X)))X)X)