fun Ġmain () Ġ{ ĊĠĠĠ Ġfun Ġpreprocess ( input : ĠList < String >): ĠList < List < String >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinput . map Ġ{ Ġit . split (" Ġ") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsplit ( input : ĠList < List < String >> ): ĠMutable List < List < List < String >>> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġblocks Ġ= Ġmutable ListOf < List < List < String >> >() ĊĠĠĠĠĠĠĠ Ġvar Ġblock Ġ= Ġmutable ListOf < List < String >>() ĊĠĠĠĠĠĠĠ Ġfor Ġ( e Ġin Ġinput ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e [ 0 ] Ġ== Ġ" inp ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( block . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblocks . add ( block ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock . add ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġblocks . add ( block ) ĊĠĠĠĠĠĠĠ Ġreturn Ġblocks ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo Backward Step ( block : ĠList < List < String >>, Ġw : ĠInt , Ġz : ĠInt ): ĠList < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdiv Z Ġ= Ġblock [ 4 ][ 2 ]. toInt () Ġ// ĠC ĊĠĠĠĠĠĠĠ Ġval Ġadd X Ġ= Ġblock [ 5 ][ 2 ]. toInt () Ġ// ĠA ĊĠĠĠĠĠĠĠ Ġval Ġadd Y Ġ= Ġblock [ 1 5 ][ 2 ]. toInt () Ġ// ĠB ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġmutable ListOf < Int >() ĊĠĠĠĠĠĠĠ Ġval Ġy 0 Ġ= Ġz Ġ- Ġw Ġ- Ġadd Y ĊĠĠĠĠĠĠĠ Ġif Ġ( y 0 Ġ% Ġ 2 6 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres . add ( y 0 Ġ/ Ġ 2 6 Ġ* Ġdiv Z ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( w Ġ- Ġadd X Ġin Ġ 0 .. 2 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy 1 Ġ= Ġz Ġ* Ġdiv Z ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres . add ( w Ġ- Ġadd X Ġ+ Ġy 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcalc ( blocks : ĠList < List < List < String >> >, Ġorder : ĠInt Progress ion ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġres Ġ= Ġmutable Map Of ( 0 Ġto Ġ"") ĊĠĠĠĠĠĠĠ Ġfor Ġ( block Ġin Ġblocks . reversed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres New Ġ= Ġmutable Map Of < Int , ĠString >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( z , Ġinput Str ) Ġin Ġres ) Ġfor Ġ( w Ġin Ġorder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Z Ġ= Ġdo Backward Step ( block , Ġw , Ġz ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres New . put All ( new Z . map Ġ{ Ġit Ġto Ġw . toString () Ġ+ Ġinput Str Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres Ġ= Ġres New ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġres [ 0 ]?. to Long () Ġ?: Ġthrow ĠIllegalStateException () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpart 1 ( input : ĠList < List < String >> ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġblocks Ġ= Ġsplit ( input ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcalc ( blocks , Ġ 1 .. 9 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpart 2 ( input : ĠList < List < String >> ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġblocks Ġ= Ġsplit ( input ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcalc ( blocks , Ġ 9 Ġdown To Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġinput Ġ= Ġpreprocess ( read Input ( 2 4 )) ĊĊĠĠĠ Ġprintln ( part 1 ( input )) ĊĠĠĠ Ġprintln ( part 2 ( input )) Ċ } Ċ