著名な生物学者である部陪博士は生物が発生段階でどのようにして左右非対称になるかに関する研究を続けた結果,一つの仮説に至った.その仮説を学会で発表するため,部陪博士は一つの細胞が分裂を繰り返していく過程を木の形に表した図をポスターに印刷することにした.あなたの仕事は,教授から受け取った木のデータを,聴衆が理解しやすいように,ある決められた条件を満たす形に整形するプログラムを作成することである.
細胞の分裂過程を表す木は次のような形状をしている.
博士の仮説によれば,この木の構造を見れば,その中に現れる各細胞の「非対称性の強さ」を比較できるという.そのような比較を行うための準備として,まず各細胞の「左右類似度」と呼ばれる値が次のようにして定義される.
この木における細胞 A の左右類似度は次のように求められる.まず,A の左の子細胞である B 以下に現れる木には,構造としては次の 3 種類のものがある.右端に描かれた構造を持つ木は 3 回現れるが,構造としては 1 種類と数える.
一方,A の右の子細胞である C 以下には,次の 4 種類の構造が現れる.
これらのうち,B 以下の構造の 1,2,3 番目のものは,それぞれ,C 以下の構造の 2,3,4 番目のものと同じ構造とみなされる.よって,計 4 種類の構造が現れていて,そのうち,左右共通に現れているのは 3 種類ということになり,細胞 A の左右類似度は 3/4 である.
博士の仮説によれば,この「左右類似度」を用いて,二つの細胞 X と Y のどちらがより「非対称性が強い」かを以下の規則に基づいて判定できる.
さて,今回作成するのは,細胞の分裂過程を表す前述のような木構造が与えられた際に,各細胞の左の子細胞と右の子細胞を適宜,入れ替えていくことによって,次のような条件が満たされている状態に整形するプログラムである.
例えば,図F-2 の木の場合,B と C を比較すると B の方が左右類似度が低く,そのため非対称性が強いので,B が左,C が右という配置は変わらない.さらに,B が A の「左の子細胞」であるので,B の子細胞のうち非対称性が強いものが左へ配置される.逆に,C は A の「右の子細胞」であるので,C の子細胞のうち非対称性が強いものが右へ配置される.他の細胞に対しても同様に考えていくと,最終的な整形結果は次のようになる.
なお,与えられた木に対して行って良い操作は同じ親の左右の子細胞の入れ替えのみであることに注意すること.例えば,図F-2の木を以下のように変形することはできない.
入力は,n個(1≤n≤100)の木を記述しているn行と,それに続く,入力の終わりを表す一つの「0」のみからなる行とからなる.一つの木は最小1個最大127個の細胞を含む.各木を表す記述は,たとえば,次のような形式をしている.
((x (x x)) x)
これは,図F-1に示した木を表現している.より形式的には,木の記述は,
"(" <左の子細胞以下の木の記述> <一つのスペース> <右の子細胞以下の木の記述> ")"または,
"x"のどちらかの形式を取る.前者が出発点となる細胞に子細胞が二つある木の記述形式,後者が出発点となる細胞に子細胞がない木の記述形式である.
出力には,入力の各木に対してその整形結果一つを 1 行に出力せよ.出力の順番は,対応する入力中の木と同じ順番であること.木の記述には入力と同じ記述形式を用いること.また,各行は,一つの木の記述以外に余計な文字を含んではならない.
(((x x) x) ((x x) (x (x x)))) (((x x) (x x)) ((x x) ((x x) (x x)))) (((x x) ((x x) x)) (((x (x x)) x) (x x))) (((x x) x) ((x x) (((((x x) x) x) x) x))) (((x x) x) ((x (x x)) (x (x x)))) ((((x (x x)) x) (x ((x x) x))) ((x (x x)) (x x))) ((((x x) x) ((x x) (x (x x)))) (((x x) (x x)) ((x x) ((x x) (x x))))) 0
((x (x x)) ((x x) ((x x) x))) (((x x) ((x x) (x x))) ((x x) (x x))) (((x ((x x) x)) (x x)) ((x x) ((x x) x))) (((x ((x ((x x) x)) x)) (x x)) ((x x) x)) ((x (x x)) ((x (x x)) ((x x) x))) (((x (x x)) (x x)) ((x ((x x) x)) ((x (x x)) x))) (((x (x x)) ((x x) ((x x) x))) (((x x) (x x)) (((x x) (x x)) (x x))))