Рикошетні Роботи
Бригада з чотирьох роботів доставляє деталі у виробничий цех, організований у вигляді прямокутної сітки. Кожен робот займає одну квадратну клітинку і позначений числом від 1 до 4. Роботи можуть рухатися в чотирьох напрямках: вліво, вправо, вгору або вниз. Однак, як тільки робот починає рух, він зупиняється лише тоді, коли зустрічає перешкоду (наприклад, стіну, край фабрики або іншого нерухомого робота). Роботи рухаються по черзі, тобто в кожен момент часу рухається лише один робот.
Завдання полягає в тому, щоб знайти ефективну послідовність рухів, щоб робот 1 досягнув заданої цілі. Для цього може знадобитися переміщення інших роботів з його шляху або використання їх як перешкод для "рикошетних" рухів.
На прикладі вище, сірі клітинки представляють стіни, X - цільове місце, а 1 і 2 - початкові позиції двох роботів. Одне з оптимальних рішень складається з шести ходів, як показано нижче.
Важливо, щоб робот 1 залишився на цільовій клітинці, а не просто пройшов через неї (ціль не змушує роботів зупинятися - лише стіни, краї та інші роботи).
Вам надано опис виробничого плану, початкову позицію робота і цільову позицію. Потрібно обчислити мінімальну кількість ходів, необхідну, щоб робот 1 досяг цілі.
Вхідні дані
Перший рядок містить кількість роботів n (1 ≤ n ≤ 4), ширину w і висоту h (w, h ≥ 1, max(w, h) ≤ 10) виробничого поверху в клітинках, і верхню межу l (1 ≤ l ≤ 10) на кількість ходів для пошуку рішень. Наступні h рядків представляють рядки виробничого цеху з w символами, кожен з яких описує позицію клітинки:
W - клітинка зайнята стіною;
X - цільова клітинка (одна);
1, 2, 3, 4 - початкові позиції роботів;
’.’ - порожня клітинка.
Вихідні дані
Виведіть мінімальну кількість ходів, за яку робот 1 може досягти цільового місця, або NO SOLUTION, якщо не існує рішення з кількістю ходів, меншою або рівною заданій верхній межі.