10851. Втеча з космічної станції


Відправити розв'язок

Бали: 100
Time limit: 2.0s
Memory limit: 500M

Authors:
Problem type
Allowed languages
C++, Java, Pascal, Python

Уявіть, що ви перебуваєте на службі у зовнішній розвідці Міжгалактичного Альянсу Республіканських Сил (МАРС). Одному з агентів розвідки не пощастило, і він був захоплений на засекреченій космічній базі. На щастя, зовнішню розвідку МАРС вдалося роздобути план цієї бази. І тепер вам доручено розробити план втечі.

База є прямокутником розміром \(N \times M\), з усіх боків оточений стінами, і складається з квадратних відсіків одиничної площі. База має \(K\) виходи, до одного з яких агенту необхідно дістатися. У деяких відсіках бази є стіни. Ваш агент може переміщатися з відсіку в будь-який із чотирьох сусідніх з ним, якщо в тому відсіку, куди він хоче переміститися, немає стіни.

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

Початкове становище вашого агента відоме. Вам необхідно знайти найкоротший шлях втечі (тобто шлях через мінімальну кількість відсіків).

Формат вхідних даних

У першому рядку записані числа \(N\) і \(M\) (\(2≤N≤100\), \(2≤M≤100\)), що задають розміри бази: \(N\) — кількість рядків у плані бази, \(M\) — кількість стовпців.

У другому рядку записані початкові координати агента \(X_A,Y_A\) (\(1≤X_A≤N\), \(1≤Y_A≤M\)). Перша координата задає номер рядка, друга - номер стовпця. Рядки нумеруються зверху вниз, стовпці зліва направо.

Далі йдуть \(N\) рядків по \(M\) чисел, що задають опис стінок усередині бази: 1 відповідає стінці, 0 - її відсутності.

Далі в окремому рядку записано число \(H\) (\(0≤H≤1000\)) – кількість гіпертунелів.

У наступних \(H\) рядках йдуть описи гіпертунелів. Кожен гіпертунель задається 4 числами: \(X_1, Y_1, X_2, Y_2\) (\(1≤X_1,X_2≤N\); \(1≤Y_1,Y_2≤M\)) - координатами входу та виходу гіпертунелю. Жодні два гіпертунелі не мають загального входу.

Після цього в окремому рядку слідує число \(K\) (\(1≤K≤10\)) — кількість виходів з бази.

У наступних \(K\) рядках йдуть описи виходів із бази. Кожен вихід визначається двома координатами \(X\) і \(Y\) (\(1≤X≤N\); \(1≤Y≤M\)).

Гарантується, що початкові координати агента не збігаються з жодним виходом і він не стоїть у відсіку, зайнятому стіною. Жодні входи та виходи гіпертунелів, а також виходи з бази не знаходяться у відсіках, зайнятих стінами. Ніякий вхід у гіпертунель не збігається з виходом з бази

Формат вихідних даних

Якщо втеча неможлива, виведіть єдиний рядок з написом "Impossible".

В іншому випадку в першому рядку видайте число \(L\) - кількість відсіків у найкоротшому шляху втечі.

У наступних рядках \(L\) послідовно виведіть координати відсіків найкоротшого шляху втечі. Якщо рішень кілька, виведіть будь-яке з них.

Приклад вхідних даних

4 5
2 1
0 0 0 0 0 
0 1 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
2
1 2 1 4
3 1 1 4
1
2 4

Приклад вихідних даних

4
2 1
3 1
1 4
2 4

Коментарі

Ще немає коментарів.