Mistrzostwa Polski Szkół Średnich w Programowaniu Zespołowym 2024

2020-2022 2023 Regulations Schedule RODO info Ranking

Problem description


Skoczek szachowy
(skoczek-szachowy)
Memory limit: 128 MB
Time limit: 5.00 s

Na szachownicy rozmiaru N × M stoi skoczek szachowy. Chce on dostać się na pewne inne pole szachownicy. Niestety, niektóre pola są dziurawe i nie można w nie wskoczyć. Skoczek porusza się oczywiście zgodnie z regułami ruchu skoczka szachowego (tj. ma maksymalnie osiem możliwych ruchów do wykonania – każdy z nich polega na przeskoczeniu do pola odległego o dokładnie trzy w metryce miejskiej od tego, na którym aktualnie stoi, to pole to musi być innego koloru niż to, na którym stał uprzednio).

Napisz program, który: wczyta opis szachownicy, początkową pozycję skoczka i jego pozycję docelową, wyznaczy minimalną długość ścieżki skoczka do pola docelowego i wypisze wynik na standardowe wyjście.

Wejście

W pierwszym wierszu wejścia znajdują się dwie liczby naturalne N i M, oddzielone pojedynczym odstępem i określające kolejno: wysokość i szerokość szachownicy. W kolejnych N wierszach znajduje się opis szachownicy: litera S oznacza początkową pozycję skoczka, litera K oznacza pozycję końcową, # oznacza pole dziurawe, zaś . oznacza pole dostępne (na które można wskoczyć).

Na wejściu znajduje się zawsze dokładnie jedna litera S i dokładnie jedna litera K.

Wyjście

W pierwszym (i jedynym) wierszu wyjścia należy wypisać jedną liczbę całkowitą – minimalną liczbę ruchów niezbędnych do osiągnięcia celu. Jeśli osiągnięcie celu jest niemożliwe, zamiast tego należy wypisać NIE.

Ograniczenia

1 ≤ N, M ≤ 1 000.

Przykład

Input Output
5 6
S.....
......
.#..#.
...#..
....K.
4