Програміст та шестикутник
Завдання цієї задачі - розв'язати ломиголовку, яка складається з 7 дерев'яних частин шестикутної форми(далі будемо їх просто називати "шестикутниками"), які необхідно покласти на 7 кілочків, які закріплені у дерев'яній основі. Кілочки пронумеровано, як показано на Рисунку 1. Кілочки пронумеровано (від 0 до 6) для зручності подальшого викладу. Шестикутники пронумеровано великими буквами від 'A' до 'G' (як на Рисунку 2). У кожної сторони шестикутника приписано ціле число (від 0 до 9 включно).
Можна помітити, що коли 7 шестикутників покласти на 7 кілочків, то 3 ребра кожного зовнішнього шестикутника та усі ребра шестикутника на кілочку 0 є сусідніми зі сторонами деяких інших шестикутників. Для розв'язання ломиголовки необхідно знайти розміщення та орієнтацію усіх 7 шестикутників таким чином, щоб числа, які записані на шестикутниках, які прилягають один до одного, були однакові. (див. Рисунок 3).
Рисунок 3 - Вид зверху на розв'язану ломиголовку
Програма повинна прочитати опис семи шестикутників, знайти розв'язок, використовуючи ці 7 шестикутників (якщо такий існує), і вивести опис розв'язку ломиголовки. Якщо розв'язок не єдиний, то можна вивести довільний з них (коли знайдено один розв'язок, то можна обертати шестикутник на кілочку 0 і відповідно інші шестикутники, попробувавши отримати інші розв'язки). Якщо розв'язку не існує, то програма повинна вивести відповідне повідомлення. Після виведення розв'язку на одну ломиголовку, програма повинна зчитати дані наступної, і так потрібно продовжувати до кінця вхідних даних.
Вхідні дані
Вхідні дані складаються з декількох тестів, кожен з яких задає опис набору шестикутників. Кожен з перших 7 рядків містить по 6 цифр (без пропусків). Це цифри, які записані на 6 сторонах кожного шестикутника. У першому рядку наведено числа, які записані на шестикутнику 'A'. Числа другого рядка відповідають шестикутнику 'B', і так далі до 7 рядка, числа якого належать шестикутнику 'G'. Перша цифра у кожному рядку - це цифра на стороні, яка знаходиться у положенні "12 Годин" або "Верх". Наступні 5 цифр - числа на сторонах, розміщених за годинниковою стрілкою від сторони "TOP". Наприклад, шестикутник на рисунку 2 можна подати рядком 123456. Як можна помітити на рисунку 3, сторони шестикутника НЕ обов'язково містять різні числа.
Після 7 рядків, які описують множину шестикутників, йде рядок з однієї зірочки (*) у колонці 1, який використовується для відокремлення між множинами шестикутників. Після знаходження відповіді для поточної множини шестикутників, і до кінця файлу, Ваша програма повинна прочитати наступні 7 рядків які являють собою опис наступної множини шестикутників - потрібно розв'язати нову лоитголовку. Зірочка йде після кожної множини, включаючи останню.
Вихідні дані
Вивести розв'язок для кожної вхідної множини шестикутників. У розв'язку потрібно вказати, який шестикутник повинен бути надітий на кілочок 0, на кілочок 1, на кілочок 2, ... і на кілочок 6. Для кожного шестикутника слід також описати його орієнтацію. Таким чином, потрібно вивести 3 колонки інформації. Колонка 1 містить список кілочків від 0 до 6. Колонка 2 містить список букв, які описують які шестикутники кладуться на кілочок 0, на кілочок 1, ... і на кілочок 6, саме у такому порядку. У колонці 3 подано список чисел на сторонах шестикутника, номер якого записано у колонці 2. Цифри повинні починатись зі сторони у позиції "ВЕРХ", коли ломиголовку розв'язано. Наступні 5 цифр відповвідають сторонам у порядку обходу за годинниковою стрілкою. Кожна колонка повинна мати назву. Назва першої колонки "PEG". Назва другої колонки "HEX", а третьої "POSITION".
Якщо для деякї множини шестикутників розв'язку не існує, то потрібно вивести повідомлення: "No solutions possible". Після опису кожного розв'язку вивести рядок з 36 зірочок "*" (або після повідомлення "No solutions possible") для відокремлення розв'язків ломиголовок одного від іншого.