Obsah

Hlavolam

Zadání: http://cw.felk.cvut.cz/courses/a4m33pal/task.php?task=hlavolam

Mějme hlavolam, který představuje dvojrozměrné pole s rozměry M×N. Každé políčko hlavolamu obsahuje přirozené číslo v rozsahu od 1 do M·N. Každé číslo od 1 do M·N je v hlavolamu zastoupeno právě jediným políčkem. Nad hlavolamem jsou povoleny provádět pouze následující čtyři operace:

levá rotace řádku, pravá rotace řádku, levá rotace sloupce, pravá rotace sloupce.

Rotace je definovaná následovně:

Nechť a0 až ak-1 jsou všechna políčka nějakého vybraného řádku nebo sloupce, který chceme rotovat. Pravá rotace permutuje políčka podle jejich indexů permutací pR, kde pR[i]=(i+1) mod k. Levá rotace permutuje políčka podle jejich indexů permutací pL, kde pL[i]=(i+k-1) mod k.

Úkolem pro Vás je zjistit, jaké je potřeba nejmenší množství operací k složení hlavolamu ze zadaného startovního stavu do zadaného cílového stavu.

Vstup

Na prvním řádku budou dvě čísla M a N oddělená mezerou udávající rozměry hlavolamu.

Na dalších řádcích budou za sebou následovat dva hlavolamy. První bude popisovat startovní hlavolam a druhý bude popisovat cílový hlavolam.

Každý hlavolam bude představovat M řádků, kde na každém řádku bude N přirozených čísel oddělených mezerou.

Předpokládejte, že vstupní formát je vždy korektní a maximální možná velikost hlavolamu je vždy menší nebo rovna 20. Velikostí hlavolamu myslíme počet políček hlavolamu tj. součin M·N.

Výstup

Výstupem bude vždy jediný řádek s celým číslem udávajícím minimálním počet operací potřebných k složení hlavolamu. Pokud složení hlavolamu nebude možné, bude výsledné celé číslo -1.

Příklad:

Vstup:

2 4
1 2 3 4
5 6 7 8 
2 5 6 1
8 3 4 7

Výstup:

4

Ilustrativní popis možného vzniku cílového hlavolamu ze startovního:

Startovní hlavolam:

1 2 3 4
5 6 7 8 

Levá rotace prvního řádku:

2 3 4 1
5 6 7 8 

Pravá rotace druhého řádku:

2 3 4 1
8 5 6 7  

Levá rotace druhého sloupce:

2 5 4 1
8 3 6 7  

Pravá rotace třetího sloupce:

2 5 6 1
8 3 4 7