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

Гра з фішками

Гра з фішками

Ви є одним з розробників нової комп'ютерної гри. Гра відбувається на прямокутній дошці, яка складається з \textbf{W}\textit{×}\textbf{H} клітинок. Кожна клітинка може або містити, або не містити фішку (див. рисунок). Важливою частиною гри є перевірка того, чи з'єднані дві фішки шляхом, який задовольняє наступні умови: \begin{enumerate} \item Шлях повинен складатись з відрізків вертикальних і горизонтальних прямих. \item Шлях не повинен перетинати інші фішки. \end{enumerate} При цьому частина шляху \textit{може} виявитись поза дошкою. Наприклад: \includegraphics{https://static.e-olymp.com/content/96/96757541b824ace121e004572c18ec255454fe99.jpg} Фішки з координатами (\textbf{1},\textbf{ 3}) і (\textbf{4}, \textbf{4}) можуть бути з'єднані. Фішки з координатами (\textbf{2}, \textbf{3}) і (\textbf{5}, \textbf{3}) також можуть бути з'єднані. А ось фішки з координатами (\textbf{2}, \textbf{3}) і (\textbf{3}, \textbf{4}) з'єднати не можна -- довільни з'єднуючий їх шлях перетинає інші фішки. Вам необхідно написати програму, яка перевіряє, чи можна з'єднати дві фішки шляхом, який задовільняє вказаним вимогам, і, у випадку позитивної відповіді, яка визначає мінімальну довжину такого шляху (вважається, що шлях має згини, початок і кінець лише у центрах клітинок (або "уявних клітинок", розміщених поза дошкою), а відрізок, яки сполучає центры двох сусідніх клітинок, має довжину \textbf{1}). \InputFile Перший рядок вхідного файлу містить два натуральних числа: \textbf{W} -- ширина дошки, \textbf{H} -- висота дошки (\textbf{1} ≤ \textbf{W}, \textbf{H}\textit{ }≤ \textbf{75}). Наступні \textbf{H} рядків містять опис дошки: кожен рядок складається рівно з \textbf{W} символів: символ "\textbf{X}" (велика англійська літера "\textbf{X}") позначає фішку, символ "\textbf{.}" (точка) позначаєт пусте місце. Всі інші рядки містять опис запитів: кожен запит складається з чотирьох натуральних чисел, відокремлених пропусками -- \textbf{X_1}, \textbf{Y_1}, \textbf{X_2}, \textbf{Y_2}, причому \textbf{1} ≤ \textbf{X_1}, \textbf{X_2}\textit{_\{ \}}≤\textit{ }\textit{\textbf{W}}, \textbf{1} ≤ \textbf{Y_1}, \textbf{Y_2}\textit{_\{ \}}≤\textit{ }\textbf{H}. Тут (\textbf{X_1}, \textbf{Y_1}) и (\textbf{X_2}, \textit{\textbf{Y_2}}) -- координати фішок, які потрібно з'єднати (ліва верхня клітинка має координати (\textbf{1},\textbf{ 1})). Гарантується, що ці координати не будуть співпадати (крім останнього запиту; див. далі). Останній рядок містить запит, який складається з чотирьох чисел \textbf{0}; цей запит опрацьовувати не потрібно. Кількість запитів не перевищує \textbf{20}. \OutputFile Для кожного запиту необхідно вивести одне ціле число у окремому рядку -- довжину найкоротшого шляху, або \textbf{0}, якщо такого шляху не існує.
Ліміт часу 1 секунда
Ліміт використання пам'яті 64 MiB
Вхідні дані #1
5 4
XXXXX
X...X
XXX.X
.XXX.
2 3 5 3
1 3 4 4
2 3 3 4
0 0 0 0
Вихідні дані #1
5
6
0