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

Вверх по дереву

Вверх по дереву

Анатолий - типичный студент во многих смыслах. Всякий раз он пытается копипастить код вместо написания с нуля. Такой подход неизбежно доставляет ему проблемы. Например, когда он впервые познакомился с разными порядками обхода бинарных деревьев \textbf{post}, \textbf{pre} и \textbf{in} и получил код \textbf{pre}-обхода с вызовом функции вывода вершины \textbf{output}, он просто скопировал код, перенес вызов \textbf{output} в правильное место и переименовал функцию. Однако он забыл переименовать функции в теле обхода, получив неправильные функции обходов. И тут Анатолий проявил себя не как типичный студент - он стал тестировать свой код! К сожалению, когда он увидел, что функции работают неправильно, он стал вести себя как обычный студент снова. Он стал паниковать и случайным образом переименовывать вызовы функций во всех трех обходах, надеясь, что они начнут работать правильно. Преподаватель Анатолия тестировала его код на случайных деревьях с символами в вершинах. Когда она посмотрела на выходные данные программы, то поняла, что случилось. Тем не менее, вместо того, чтобы посмотреть код, она попробовала восстановить код по его выводу. Для этого она сделала справедливые предположения: \begin{enumerate} \item команда вывода символа находится на правильном месте, например, между вызовами функций в \textbf{inPrint} обходе; \item среди всех \textbf{6} рекурсивных вызовов ровно по два вызова \textbf{inPrint}, \textbf{prePrint} и \textbf{postPrint}, возможно, стоящих в неправильных местах. \end{enumerate} Вскоре преподаватель поняла, что восстановление кода Анатолия и тестового дерева по выводу программы не такая простая задача и что результат может быть неоднозначным. Вам предстоит помочь ей найти все возможные реконструкции кода Анатолия. Вдобавок, для каждого восстановленного кода необходимо найти лексикографически наименьшее дерево по выходным данным программы. \InputFile Входные данные состоят из одного теста, содержащего три строки - выходные строки функций соответственно \textbf{prePrint}, \textbf{inPrint} и \textbf{postPrint}. Строки имеют одинаковую длину \textbf{n} (\textbf{4} ≤ \textbf{n} ≤ \textbf{26}), все символы каждой из строк различны. Гарантируется, что хотя бы одно решение существует. \OutputFile Выведите все возможные восстановления, упорядоченные как приведено ниже. Для каждого восстановления следует вывести две части. Первая часть состоит из одной строки и содержит шесть вызовов процедур Анатолия: первые два (рекурсивных) вызова процедуры \textbf{prePrint}, за которыми следуют вызовы процедуры \textbf{inPrint}, и наконец вызовы \textbf{postPrint}. Указанные вызовы описываются словами \textbf{Pre}, \textbf{In} и \textbf{Post}, разделенными пробелами. Например, если бы процедуры Анатолия были корректны, то первая часть содержала бы строку \textbf{Pre Pre In In Post Post}.. Вторая часть состоит из трех строк и описывает первое тестовое дерево, которое может сгенерировать наблюдаемый вывод. Первая строка содержит корректный вывод дерева в порядке \textbf{preorder}, вторая и третья строки - корректный вывод дерева в порядке \textbf{inorder} и \textbf{postorder} соответственно. Первое дерево содержит алфавитно наименьший \textbf{preorder} вывод. Если и таких деревьев несколько, то выводить следует то, у которого \textbf{inorder} вывод алфавитно наименьший. Каждое восстановление - это последовательность из \textbf{6} элементов, выбранных из \textbf{Pre}, \textbf{In} и \textbf{Post}. Порядок восстановлений определяется порядком на элементах: \textbf{Pre} < \textbf{In} < \textbf{Post}.
Лимит времени 5 секунд
Лимит использования памяти 256 MiB
Входные данные #1
HFBIGEDCJA
BIGEDCJFAH
BIGEDCJFAH
Выходные данные #1
Pre Post In Post In Pre
HFBJCDEGIA
BIGEDCJFAH
IGEDCJBAFH
Источник ACM-ICPC World Finals 2013