import Ġjava . util . LinkedList Ċ import Ġjava . util . Queue Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġ// Ġval Ġbr Ġ= ĠFile ("./ input . txt "). buffered Reader () ĊĠĠĠ Ġval Ġbr Ġ= ĠSystem .` in `. buffered Reader () ĊĠĠĠ Ġval Ġfield Ġ= Ġmutable ListOf < Mutable List < String >>() ĊĠĠĠ Ġrepeat ( 1 2 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġbr . readLine (). split (" "). filter Ġ{ Ġ! it . isNull Or Blank () Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠ Ġfield . add ( line ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġbr . close () ĊĠĠĠ Ġvar Ġresult Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġtarget Ġ= Ġscan And Clear ( field ) ĊĠĠĠ Ġwhile Ġ( target ) Ġ{ ĊĠĠĠĠĠĠĠ Ġresult ++ ĊĠĠĠĠĠĠĠ Ġdown ( field ) ĊĠĠĠĠĠĠĠ Ġtarget Ġ= Ġscan And Clear ( field ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprintln ( result ) Ċ } Ċ Ċ fun Ġscan And Clear ( field : ĠList < Mutable List < String >> ): ĠBoolean Ġ{ ĊĠĠĠ Ġvar Ġresult Ġ= Ġfalse ĊĠĠĠ Ġ( 0 .. 1 1 ). forEach Ġ{ Ġr Ġ-> ĊĠĠĠĠĠĠĠ Ġ( 0 .. 5 ). forEach Ġ{ Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field [ r ][ c ] Ġ!= Ġ". ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= Ġb fs ( field , Ġr , Ġc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target . isNotEmpty () Ġ&& Ġtarget . size Ġ>= Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear ( field , Ġtarget ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ fun Ġb fs ( field : ĠList < Mutable List < String >>, Ġr : ĠInt , Ġc : ĠInt ): ĠSet < Pair < Int , ĠInt >> Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġmutable Set Of < Pair < Int , ĠInt >>() ĊĠĠĠ Ġval Ġtarget Color Ġ= Ġfield [ r ][ c ] ĊĠĠĠ Ġval Ġqueue : ĠQueue < Pair < Int , ĠInt >> Ġ= ĠLinkedList < Pair < Int , ĠInt >>() ĊĠĠĠ Ġval Ġvisited Ġ= Ġmutable ListOf < Mutable List < Boolean >>() ĊĠĠĠ Ġrepeat ( 1 2 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtmp Ġ= Ġmutable ListOf < Boolean >() ĊĠĠĠĠĠĠĠ Ġrepeat ( 6 ) Ġ{ Ġtmp . add ( false ) Ġ} ĊĠĠĠĠĠĠĠ Ġvisited . add ( tmp ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġresult . add ( Pair ( r , Ġc )) ĊĠĠĠ Ġqueue . add ( Pair ( r , Ġc )) ĊĠĠĠ Ġvisited [ r ][ c ] Ġ= Ġtrue ĊĠĠĠ Ġval Ġdr Ġ= Ġint ArrayOf ( 0 , Ġ 0 , Ġ 1 , Ġ- 1 ) ĊĠĠĠ Ġval Ġdc Ġ= Ġint ArrayOf ( 1 , Ġ- 1 , Ġ 0 , Ġ 0 ) ĊĠĠĠ Ġwhile Ġ( queue . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( cur R , Ġcur C ) Ġ= Ġqueue . poll () ĊĠĠĠĠĠĠĠ Ġ( 0 .. 3 ). forEach Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnr Ġ= Ġcur R Ġ+ Ġdr [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnc Ġ= Ġcur C Ġ+ Ġdc [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( 0 .. 1 1 ). contains ( nr ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 .. 5 ). contains ( nc ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! visited [ nr ][ nc ] Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield [ nr ][ nc ] Ġ== Ġtarget Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisited [ nr ][ nc ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . add ( Pair ( nr , Ġnc )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Pair ( nr , Ġnc )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ fun Ġclear ( field : ĠList < Mutable List < String >>, Ġtarget : ĠSet < Pair < Int , ĠInt >>) Ġ= ĊĠĠĠĠĠĠĠ Ġtarget . forEach Ġ{ Ġfield [ it . first ][ it . second ] Ġ= Ġ"." Ġ} Ċ Ċ fun Ġdown ( field : ĠList < Mutable List < String >>) Ġ{ ĊĠĠĠ Ġ( 0 .. 5 ). forEach Ġ{ Ġc Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġtmp Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġ( 0 .. 1 1 ). forEach Ġ{ Ġr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field [ r ][ c ] Ġ!= Ġ". ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp . add ( field [ r ][ c ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġtmp R Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrepeat ( 1 2 Ġ- Ġtmp . size ) Ġ{ Ġfield [ tmp R ++ ][ c ] Ġ= Ġ"." Ġ} ĊĠĠĠĠĠĠĠ Ġtmp . forEach Ġ{ Ġfield [ tmp R ++ ][ c ] Ġ= Ġit Ġ} ĊĠĠĠ Ġ} Ċ } Ċ