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

Програміст та шестикутник

Програміст та шестикутник

Завдання цієї задачі - розв'язати ломиголовку, яка складається з \textbf{7} дерев'яних частин шестикутної форми(далі будемо їх просто називати "шестикутниками"), які необхідно покласти на \textbf{7} кілочків, які закріплені у дерев'яній основі. Кілочки пронумеровано, як показано на \textit{\textbf{Рисунку 1}}. Кілочки пронумеровано (від \textbf{0} до \textbf{6}) для зручності подальшого викладу. Шестикутники пронумеровано великими буквами від '\textbf{A}' до '\textbf{G}' (як на \textit{\textbf{Рисунку 2}}). У кожної сторони шестикутника приписано ціле число (від \textbf{0} до \textbf{9} включно). Можна помітити, що коли \textbf{7} шестикутників покласти на \textbf{7} кілочків, то \textbf{3} ребра кожного зовнішнього шестикутника та усі ребра шестикутника на кілочку \textbf{0} є сусідніми зі сторонами деяких інших шестикутників. Для розв'язання ломиголовки необхідно знайти розміщення та орієнтацію усіх \textbf{7 }шестикутників таким чином, щоб числа, які записані на шестикутниках, які прилягають один до одного, були однакові. (див. \textit{\textbf{Рисунок 3}}). \includegraphics{https://static.e-olymp.com/content/9f/9f57d564bf12b883425bacc54b773dadfaa7db85.jpg} \textit{\textbf{Рисунок 3}} - Вид зверху на розв'язану ломиголовку Програма повинна прочитати опис семи шестикутників, знайти розв'язок, використовуючи ці \textbf{7} шестикутників (якщо такий існує), і вивести опис розв'язку ломиголовки. Якщо розв'язок не єдиний, то можна вивести довільний з них (коли знайдено один розв'язок, то можна обертати шестикутник на кілочку \textbf{0} і відповідно інші шестикутники, попробувавши отримати інші розв'язки). Якщо розв'язку не існує, то програма повинна вивести відповідне повідомлення. Після виведення розв'язку на одну ломиголовку, програма повинна зчитати дані наступної, і так потрібно продовжувати до кінця вхідних даних. \InputFile Вхідні дані складаються з декількох тестів, кожен з яких задає опис набору шестикутників. Кожен з перших \textbf{7} рядків містить по \textbf{6 }цифр (без пропусків). Це цифри, які записані на \textbf{6} сторонах кожного шестикутника. У першому рядку наведено числа, які записані на шестикутнику '\textbf{A}'. Числа другого рядка відповідають шестикутнику '\textbf{B}', і так далі до \textbf{7} рядка, числа якого належать шестикутнику '\textbf{G}'. Перша цифра у кожному рядку - це цифра на стороні, яка знаходиться у положенні "\textbf{12 Годин}" або "\textbf{Верх}". Наступні \textbf{5} цифр - числа на сторонах, розміщених за годинниковою стрілкою від сторони "\textbf{TOP}". Наприклад, шестикутник на рисунку \textbf{2} можна подати рядком \textbf{123456}. Як можна помітити на рисунку \textbf{3}, сторони шестикутника НЕ обов'язково містять різні числа. Після \textbf{7} рядків, які описують множину шестикутників, йде рядок з однієї зірочки (\textbf{*}) у колонці \textbf{1}, який використовується для відокремлення між множинами шестикутників. Після знаходження відповіді для поточної множини шестикутників, і до кінця файлу, Ваша програма повинна прочитати наступні \textbf{7} рядків які являють собою опис наступної множини шестикутників - потрібно розв'язати нову лоитголовку. Зірочка йде після кожної множини, включаючи останню. \OutputFile Вивести розв'язок для кожної вхідної множини шестикутників. У розв'язку потрібно вказати, який шестикутник повинен бути надітий на кілочок \textbf{0}, на кілочок \textbf{1}, на кілочок \textbf{2}, ... і на кілочок \textbf{6}. Для кожного шестикутника слід також описати його орієнтацію. Таким чином, потрібно вивести \textbf{3} колонки інформації. Колонка \textbf{1} містить список кілочків від \textbf{0} до \textbf{6}. Колонка \textbf{2} містить список букв, які описують які шестикутники кладуться на кілочок \textbf{0}, на кілочок \textbf{1}, ... і на кілочок \textbf{6}, саме у такому порядку. У колонці \textbf{3 }подано список чисел на сторонах шестикутника, номер якого записано у колонці \textbf{2}. Цифри повинні починатись зі сторони у позиції "\textbf{ВЕРХ}", коли ломиголовку розв'язано. Наступні \textbf{5} цифр відповвідають сторонам у порядку обходу за годинниковою стрілкою. Кожна колонка повинна мати назву. Назва першої колонки "\textbf{PEG}". Назва другої колонки "\textbf{HEX}", а третьої "\textbf{POSITION}". Якщо для деякї множини шестикутників розв'язку не існує, то потрібно вивести повідомлення: "\textbf{No solutions possible}". Після опису кожного розв'язку вивести рядок з \textbf{36} зірочок "\textbf{*}" (або після повідомлення "\textbf{No solutions possible}") для відокремлення розв'язків ломиголовок одного від іншого.
Ліміт часу 1 секунда
Ліміт використання пам'яті 64 MiB
Вхідні дані #1
665403
444444
666666
123456
123456
040404
289766
*
123456
111111
222222
333333
444444
555555
666666
*
Вихідні дані #1
PEG  HEX  POSITION
---  ---  --------
 0    A    665403
 1    G    976628
 2    C    666666
 3    E    612345
 4    B    444444
 5    F    404040
 6    D    123456
************************************
No solutions possible
************************************

Пояснення: Розв`язок першого тесту наведено на рисунку 3.