eolymp
bolt
Спробуйте наш новий інтерфейс для відправки розв'язків
Задачі

Нумерація дерев

Нумерація дерев

Занумеруємо усі бінарні дерева відповідно до наступної схеми: - Порожнє дерево має номер \textbf{0}. - Дерево з єдиною вершиною має номер \textbf{1}. - Усі бінарні дерева з \textbf{m} вершинами мають номери, менші за номери дерев з \textbf{m + 1} вершинами. - Довільне бінарне дерево з \textbf{m} вершинами, ліве піддерево якого має номер \textbf{L}, а праве \textbf{R}, має номер \textbf{n} тоді і тільки тоді, коли усі дерева з \textbf{m} вершинами у яких номер > \textbf{n} омають одну із властивостей: - ліве піддерево має номер, більший за \textbf{L}, або - ліве піддерево має номер \textbf{L}, а праве піддерево має номер, більший за \textbf{R}. Перші \textbf{10} бінарних дерев та \textbf{20}-е дерево цієї послідовності наведені нижче: \includegraphics{https://static.e-olymp.com/content/2f/2f4c46e3d8bdde45e5fc03a97dd362fa2e22fd61.jpg} Вам необхідно вивести бінарне дерево за його номером. \InputFile Складається з декількох тестів. Кожний тест містить одне ціле число \textbf{n} (\textbf{1} ≤ \textbf{n} ≤ \textbf{500,000,000}). Останній рядок містить \textbf{n} = \textbf{0} і не обробляється. (Зауважте, що таким чином у Вас ніколи не буде виведено порожнє дерево) \OutputFile Для кожного значення \textbf{n} слід вивести рядок, що містить дерево з номером \textbf{n}. Для виводу дерева скористуйтеся наступною схемою: Дерево без дітей виводити як \textbf{X}. Дерево з лівим піддеревом \textbf{L} і правим \textbf{R} слід виводити у вигляді \textbf{(L')X(R')}, де \textbf{L'} и \textbf{R'} - представлення піддере \textbf{L} та \textbf{R}. Якщо \textbf{L} порожньо, то виводити \textbf{X(R')}. Якщо \textbf{R} порожньо, то виводити \textbf{(L')X}.
Ліміт часу 1 секунда
Ліміт використання пам'яті 64 MiB
Вхідні дані #1
1
20
31117532
0
Вихідні дані #1
X
((X)X(X))X
(X(X(((X(X))X(X))X(X))))X(((X((X)X((X)X)))X)X)