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

2020-2022 2023 Regulations Schedule RODO info Ranking

Problem description


Świadek
(E)
Limit pamięci: 1024 MB
Limit czasu: 10.00 s

Jasio przeszedł właśnie kolejny poziom w swojej nowej grze logicznej Świadek. Nie chciał przerywać dobrej passy, więc spróbował rozwiązać kolejną zagadkę. Ma ona następującą postać:

Dany jest obrazek, który podzielono na kwadratowe kafelki w taki sposób, że powstało N wierszy i M kolumn. Następnie usunięto dwa ostatnie kafelki z ostatniego wiersza i pomieszano całe ułożenie. Mieszanie polegało na wielokrotnym przesuwaniu kafelka w pionie lub poziomie na sąsiednie wolne pole. Celem gracza jest podać kolejność ruchów, po których wykonaniu otrzyma pierwotny obrazek.

Jasiowi udało się już ustalić, na które miejsce będzie musiał trafić każdy z kafelków. Każdemu kafelkowi nadał numer zgodny z pozycją, na które ma trafić. Są to liczby od 1 do N ⋅ M − 2, a pozycje numerowane są kolejno wierszami od góry do dołu, a wewnątrz wiersza od lewej do prawej.

Poniższy rysunek obrazuje jedną z sekwencji, która prowadzi do ułożenia obrazka z testu przykładowego:

Niestety Jasio nie potrafi znaleźć takiej sekwencji ruchów. Pomóż mu i napisz program, który znajdzie takie ruchy.

Wejście

Pierwszy wiersz wejścia zawiera dwie liczby całkowite N i M. Kolejne N wierszy zawiera po M liczb całkowitych, gdzie j-ta liczba w i-tym wierszu oznacza numer xij – wartość wpisaną na kafelku w i-tym wierszu i j-tej kolumnie obrazka. Liczba 0 pojawia się dokładnie dwa razy i oznacza pusty kafelek. Każda z pozostałych liczb reprezentujących wartości na kafelkach pojawi się na wejściu dokładnie raz.

Wyjście

W pierwszym wierszu wyjścia wypisz jedną liczbę R, oznaczającą liczbę ruchów, które planujesz wykonać. W~każdym z kolejnych R wierszy wypisz dwie liczby ki, di oznaczające numer kafelka oraz kierunek, w którym należy go przesunąć. Kierunek to cyfra od 0 do 3 oznaczająca przesunięcia kolejno w: górę, prawo, dół, lewo. Twoja odpowiedź zostanie zaakceptowana jeżeli nie będzie dłuższa niż 100 000 kroków, każdy ruch będzie poprawnie zdefiniowany, a po ostatnim ruchu plansza będzie poprawnie ułożona.

Ograniczenia

3 ≤ N, M ≤ 8, 0 ≤ xij ≤ N ⋅ M − 2.

Przykłady

Wejście Wyjście
3 3
1 2 0
5 3 0
7 4 6
8
3 1
3 0
5 1
5 1
4 0
4 3
5 3
6 0