// Ġ ĠSe a ĠC ucumber Ġ( https :// ad vent of code . com / 2 0 2 1 / day / 2 5 ) Ċ Ċ package Ġio . pr fx n . a oc 2 0 2 1 Ċ Ċ fun Ġmain () Ġ{ ĊĊĠĠĠ Ġval Ġv Ġ= Ġ' v ' ĊĠĠĠ Ġval Ġgt Ġ= Ġ' >' ĊĊĠĠĠ Ġval Ġlines Ġ= Ġtext Resource Reader (" input / 2 5 . txt "). read Lines () ĊĠĠĠ Ġval Ġnum Rows Ġ= Ġlines . size ĊĠĠĠ Ġval Ġnum Cols Ġ= Ġlines . first (). length ĊĠĠĠ Ġval Ġ( gts , Ġvs ) Ġ= ĊĠĠĠĠĠĠĠ Ġlines . indices ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġ Ġr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines [ r ]. indices . map NotNull Ġ{ Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchar Ġ= Ġlines [ r ][ c ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( char Ġ== Ġv Ġ|| Ġchar Ġ== Ġgt ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchar Ġto Ġ( r Ġto Ġc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy ({ Ġit . first Ġ}) Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġit [ gt ] !!. toSet () Ġto Ġit [ v ] !!. toSet () Ġ} ĊĊĠĠĠ Ġfun Ġstep ( gts : ĠMutable Set < CP >, Ġvs : ĠMutable Set < CP >): ĠInt Ġ= ĊĠĠĠĠĠĠĠ Ġsequence Of ( gts , Ġvs ). sum Of Ġ{ Ġcps Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcps . as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( r , Ġc ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( r Ġto Ġc ) Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( cps ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg ts Ġ-> Ġ( r Ġto Ġ Ġ( c Ġ+ Ġ 1 ) Ġ% Ġnum Cols ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ(( r Ġ+ Ġ 1 ) Ġ% Ġnum Rows Ġto Ġc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ(_, Ġto ) Ġ-> Ġto Ġ! in Ġg ts Ġ&& Ġto Ġ! in Ġvs Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( from , Ġto ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcps . remove ( from ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcps . add ( to ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. count () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġgt ms Ġ= Ġg ts . to Mutable Set () ĊĠĠĠ Ġval Ġv ms Ġ= Ġvs . to Mutable Set () ĊĊĠĠĠ Ġprintln ( ĊĠĠĠĠĠĠĠ Ġgenerate Sequence ( 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( step ( gt ms , Ġv ms ) Ġ> Ġ 0 ) Ġit Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġ}. last () ĊĠĠĠ Ġ) Ċ } Ċ