import Ġjava . util . Scanner Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġis Part 1 Ġ= Ġfalse Ġ// Ġtrue Ġ=> ĠPart Ġ 1 ; Ġfalse Ġ=> ĠPart Ġ 2 ĊĊĠĠĠ Ġdata Ġclass ĠPosition ( val Ġrow : ĠInt , Ġval Ġcol : ĠInt , Ġvar Ġstamp ed : ĠBoolean ) ĊĠĠĠ Ġclass ĠB ingo Board Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Map Ġ= ĠHashMap < Int , ĠPosition >( 2 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġrow Stamp s Ġ= ĠInt Array ( 5 , Ġ{ Ġ_ Ġ-> Ġ 5 }) ĊĠĠĠĠĠĠĠ Ġval Ġcol Stamp s Ġ= ĠInt Array ( 5 , Ġ{ Ġ_ Ġ-> Ġ 5 }) ĊĊĠĠĠĠĠĠĠ Ġconstructor ( board : ĠArray < IntArray >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( i , Ġrow ) Ġin Ġboard . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( j , Ġn ) Ġin Ġrow . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Map . set ( n , ĠPosition ( row = i , Ġcol = j , Ġstamp ed = false )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠAt tempts Ġto Ġstamp Ġthe Ġspot Ġwith Ġnumber Ġn Ġ( if Ġit 's Ġon Ġthe Ġboard ). ĊĠĠĠĠĠĠĠĠ Ġ* ĠIf Ġstamp ing Ġresults Ġin Ġa Ġwin , Ġthe Ġscore Ġof Ġthe Ġboard Ġof Ġis Ġreturned . ĊĠĠĠĠĠĠĠĠ Ġ* ĠOtherwise Ġ- 1 Ġis Ġreturned . ĊĠĠĠĠĠĠĠĠ Ġ* ĠĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġscore Ġis Ġn Ġ* Ġthe Ġsum Ġof Ġun stamp ed Ġnumbers . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġstamp ( n : ĠInt ) Ġ: ĠInt Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġposition Map . get ( n ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 Ġ// ĠNot Ġon Ġthe Ġboard . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . stamp ed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrow Stamp s [ p . row ] -- ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcol Stamp s [ p . col ] -- ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( row Stamp s [ p . row ] Ġ== Ġ 0 Ġ|| Ġcol Stamp s [ p . col ] Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠB ingo ! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġn Ġ* Ġposition Map . filter Values Ġ{ Ġ! it . stamp ed Ġ}. keys . sum () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 Ġ// ĠNo ĠB ingo . ĊĠĠĠĠĠĠĠ Ġ} ĊĠĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrid Ġ= ĠArray < IntArray >( 5 , Ġ{ Ġ_ Ġ-> ĠInt Array ( 5 , Ġ{ Ġ_ Ġ-> Ġ- 1 Ġ}) }) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( n , Ġp ) Ġin Ġposition Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid [ p . row ][ p . col ] Ġ= Ġn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( row Ġin Ġgrid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( n Ġin Ġrow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs . append ("$ n Ġ". pad Start ( 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs . append ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġs . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġinput Ġ= ĠScanner ( System .` in `) ĊĠĠĠ Ġval Ġchosen Numbers Ġ= ĠArrayList < Int >() ĊĠĠĠ Ġval Ġwhitespace Ġ= ĠRegex ("\\ s +") ĊĊĠĠĠ Ġvar Ġoptimal Steps Ġ= Ġif Ġ( is Part 1 ) ĠInt . MAX _ VALUE Ġelse ĠInt . MIN _ VALUE ĊĠĠĠ Ġvar Ġoptimal Score Ġ= Ġ- 1 ĊĊĠĠĠ Ġwhile ( input . hasNext Line ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( chosen Numbers . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchosen Numbers . addAll ( input . nextLine (). split (',' ). map Ġ{ Ġs Ġ-> ĠInteger . parseInt ( s ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠBuild Ġup Ġa ĠB ingo Ġgrid . ĊĠĠĠĠĠĠĠ Ġvar Ġgrid Ġ= ĠArray < IntArray >( 5 , Ġ{ Ġ_ Ġ-> ĠInt Array ( 5 ) Ġ}) ĊĠĠĠĠĠĠĠ Ġvar Ġgrid Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile ( input . hasNext Line ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscanned Ġ= Ġinput . nextLine () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sc anned . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsplit Ġ= Ġscanned . trim (). split ( whitespace ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrid [ grid Index ++] Ġ= Ġsplit . map Ġ{ Ġs Ġ-> ĠInteger . parseInt ( s ) Ġ}. to IntArray () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠPlay ĠB ingo ! ĊĠĠĠĠĠĠĠ Ġvar Ġboard Ġ= ĠB ingo Board ( grid ) ĊĠĠĠĠĠĠĠ Ġfor Ġ(( i , Ġn ) Ġin Ġchosen Numbers . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscore Ġ= Ġboard . stamp ( n ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( score Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo ĠB ingo Ġ:( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠB ingo ! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshould Update Ġ= Ġ( is Part 1 Ġ&& Ġoptimal Steps Ġ> Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġ(! is Part 1 Ġ&& Ġoptimal Steps Ġ< Ġi ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Update ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptimal Steps Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptimal Score Ġ= Ġscore ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOn Ġto Ġthe Ġnext Ġboard . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln (" SCORE : Ġ$ optimal Score ") Ċ }