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