OpenKattis
Programmeringsläger 2018

Start

2018-02-25 10:00 CET

Programmeringsläger 2018

End

2018-02-25 13:00 CET
The end is near!
Contest is over.
Not yet started.
Contest is starting in -2491 days 18:04:16

Time elapsed

3:00:00

Time remaining

0:00:00

Problem F
Åttaspelet

\includegraphics[width=0.55\textwidth ]{figur}
Figure 1: Till vänster startpositionen i det första exemplet. Pilen visar det första draget. Bilden i mitten visar ställningen efter det första draget och pilarna indikerar de återstående sju dragen som måste göras för att nå slutställningen som visas till höger.

Åttaspelet (ett småsyskon till det mer kända femtonspelet) är en typ av pussel som består av åtta kvadratiska brickor i en ram. Brickorna är numrerade från $1$ till $8$. Ramen rymmer $3\cdot 3=9$ brickor, så det finns ett hål. Ett drag består i att man skjuter en intillliggande bricka till hålets plats. Skriv ett program som givet en startställning beräknar det minsta antalet drag som behövs för att uppnå den ordnade slutställningen som visas till höger i figuren ovan.

Tips: En godtycklig ställning är antingen olöslig (vilket inte förekommer i testfallen) eller har en lösning med högst 31 drag.

Input

Programmet ska läsa in bricknumret på var och en av de $9$ positionerna, eller $0$ för hålet. Indatan kommer bestå av en enda rad med $9$ heltal, där talen är givna i vanlig "läsordning" (översta raden först, från vänster till höger). Varje tal mellan $0$ och $8$ kommer förekomma exakt en gång. I givna testfall kommer det alltid vara möjligt att nå slutställningen.

Output

Skriv ut det minsta antalet drag som krävs för att uppnå slutställningen utifrån den givna positionen.

Sample Input 1 Sample Output 1
1 5 2 7 0 3 8 4 6
8
Sample Input 2 Sample Output 2
3 7 8 5 4 6 2 0 1
27