Синій ліс#3602

Синій ліс

30 секунд
256 мегабайтів
Дуже складна

Джон грає у відому консольну гру під назвою 'Tales of Algorithmers.' Зараз він стоїть перед останнім підземеллям під назвою 'Синій Ліс.' Щоб знайти найшвидший шлях через це складне підземелля, він вирішив намалювати карту.

Підземелля складається з кількох поверхів, кожен з яких можна описати як зв'язний простий планарний граф. Вершини графа визначаються координатами -, а довжина ребра обчислюється за допомогою евклідової відстані. Деякі вершини можуть бути обладнані односторонніми варп-воротами. Якщо Джон вирішить скористатися воротами, вони перенесуть його до іншої вершини, можливо, на іншому поверсі. Відстань між варп-воротами та їх призначенням вважається .

Кожна вершина може мати не більше одного варп-ворота, хоча деякі вершини можуть бути призначенням для кількох варп-воротів.

Джон вважає, що намалював одну карту для кожного поверху, але після завершення він помітив, що міг зробити кілька помилок. Він міг намалювати один і той самий поверх кілька разів і міг забути позначити деякі варп-ворота на картах. Однак він впевнений, що позначив усі варп-ворота хоча б один раз. Тому, якщо карти одного і того ж поверху об'єднати в одну карту, всі варп-ворота повинні бути описані там. На щастя, немає поверхів, які мають таку ж форму, як інші поверхи, тому якщо дві (або більше) карти можуть бути об'єднані, вони повинні бути картами одного і того ж поверху. Також немає поверху, який є круговим симетричним (наприклад, правильний трикутник і квадрат).

Карта і карта можуть бути об'єднані, якщо карту можна перетворити на карту за допомогою лише обертання та паралельного переносу. Оскільки деякі з варп-воротів на картах можуть бути відсутні, ви не повинні враховувати існування варп-воротів при перевірці об'єднання. Якщо можливо об'єднати карту і карту , вершина на карті і відповідна вершина на карті вважаються 'ідентичними' вершинами. Іншими словами, ви повинні розглядати варп-ворота на карті як ті, що на карті , де варп-ворота розташовані на відповідних вершинах на карті . Призначення варп-воротів слід обробляти аналогічно. Після цього ви можете забути карту . Гарантується, що якщо і карта , і карта мають варп-ворота, які знаходяться на ідентичних вершинах, їх призначення також ідентичні.

Ваше завдання - знайти найкоротший шлях від входу до виходу з підземелля, використовуючи об'єднані карти.

Вхідні дані

Вхід складається з кількох наборів даних. Кожен набір даних має наступний формат.

\text{component}_1 \text{component}_2 ... \text{component}_n

- це додатне ціле число, що вказує на кількість карт. \text{component}_i описує -ту карту у наступному форматі.

x_1 y_1 x_2 y_2 ... x_A y_A s_1 d_1 s_2 d_2 ... s_B d_B sn_1 dl_1 dn_1 sn_2 dl_2 dn_2 ... sn_C dl_C dn_C

позначає кількість вершин на карті. Кожен з наступних рядків містить два цілі числа x_i і y_i, що представляють координати -ї вершини на -вимірній площині. позначає кількість ребер, що з'єднують вершини на карті. Кожен з наступних рядків містить два цілі числа, що представляють початкову і кінцеву вершину кожного ребра. Вершини на одній карті нумеруються від .

позначає кількість варп-воротів. Кожен з наступних рядків має три цілі числа, що описують варп-ворота. Перше число - це вершина, де розташовані варп-ворота. Друге і третє число - це індекси карти і вершини, що представляють призначення варп-воротів. Аналогічно вершинам, карти також нумеруються від .

Після опису всіх карт слідують два рядки. Перший рядок містить два цілі числа і , що означають, що вхід у підземелля знаходиться на -й карті, у вершині . Останній рядок має два цілі числа і , аналогічно описуючи місцезнаходження виходу.

Значення в кожному наборі даних задовольняють наступні умови:

  • 1 \le n \le 50,

  • 3 \le A \le 20,

  • A-1 \le B \le A(A-1)/2,

  • 0 \le C \le A, і

  • -10000 \le x_i, y_i \le 10000.

Вихідні дані

Для кожного набору даних виведіть відстань найкоротшого шляху від входу до виходу. Вихід не повинен містити абсолютну похибку більше ніж 10^{-1}. Якщо маршруту немає, виведіть .

Приклади

Приклад 1

Loading
Loading