@ file : Suppress (" Package Directory Mismatch ") Ċ package Ġsolutions . solutions . y 1 9 . d 1 5 Ċ Ċ import Ġhelpers .* Ċ import Ġkotlinx . coroutines .* Ċ import Ġjava . util .* Ċ Ċ private Ġfun Ġpart 1 ( data : ĠInt Code )= Ġrun Blocking Ġ{ Ċ ĉ val Ġmap = Ġmutable Map Of < Point , Long >() Ċ ĉ val Ġdd = Ġmutable Map Of < Point , Int >() Ċ ĉ var Ġpos Ġ= Ġ 0 Ġto P Ġ 0 Ċ ĉ val Ġst Ġ= ĠArray Deque < Point >() Ċ ĉ val Ġt Ġ= ĠlistOf ( 1 , 3 , 2 , 4 L ) Ċ ĉ var Ġfound Ġ= Ġfalse Ċ ĉ var Ġmax d Ġ= Ġ 0 Ċ ĉ run Computer ( data ). run { Ċĉ ĉ while ( true ){ Ċĉĉ ĉ dd [ pos ] Ġ= Ġst . size ĊĊĉĉ ĉ // Ġchanging Ġthis Ġinto Ġ`. get Quad Ne ighbours (). reversed ()` Ġwould Ġhave Ġfailed Ġdue Ġto Ġnot Ġsetting Ġmax d Ġto Ġ 0 Ġlater . Ċĉĉ ĉ val Ġd Ġ= Ġpos . get Quad Ne ighbours (). reversed (). find { it Ġ! in Ġmap . keys } Ċĉĉ ĉ max d Ġ= Ġmax ( max d , Ġst . size ) Ċĉĉ ĉ if ( d Ġ== Ġnull ){ Ċĉĉĉ ĉ if ( st . size Ġ== Ġ 0 ) Ċĉĉĉ ĉ { Ċĉĉĉĉ ĉ println ( max d ) Ċĉĉĉĉ ĉ error (" Done ") Ġ// Ġquick Ġbreak Ġout Ċĉĉĉ ĉ } Ċĉĉĉ ĉ val Ġq Ġ= Ġst . pop () Ċĉĉĉ ĉ val Ġdir Ġ= Ġpos . get Quad Ne ighbours (). indexOf ( q ) Ċĉĉĉ ĉ send ( t [ dir ]) Ċĉĉĉ ĉ val Ġr Ġ= Ġoutput . receive () Ċĉĉĉ ĉ pos Ġ= Ġq Ċĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉ ĉ val Ġdir Ġ= Ġpos . get Quad Ne ighbours (). indexOf ( d ) Ċĉĉĉ ĉ send ( t [ dir ]) Ċĉĉĉ ĉ val Ġr Ġ= Ġoutput . receive () Ċĉĉĉ ĉ map [ d ] Ġ= Ġr Ċĉĉĉ ĉ when ( r ){ Ċĉĉĉĉĉ 0 L Ġ-> Ġ{} Ċĉĉĉĉĉ 1 L Ġ-> Ġ{ Ċĉĉĉĉĉ ĉ st . push ( pos ) Ċĉĉĉĉĉ ĉ pos Ġ= Ġd Ċĉĉĉĉ ĉ } Ċĉĉĉĉĉ 2 L Ġ-> Ġ{ ĊĊĉĉĉĉĉ ĉ println ( st . size Ġ+ Ġ 1 ) Ċĉĉĉĉĉ ĉ // Ġclear Ġmap Ġand Ġkeep Ġmax Ġst Ċĉĉĉĉĉ ĉ map . clear () Ċĉĉĉĉĉ ĉ st . clear () Ċĉĉĉĉĉ ĉ pos Ġ= Ġ 0 Ġto P Ġ 0 Ċĉĉĉĉĉ ĉ map [ pos ] Ġ= Ġ 2 Ċĉĉĉĉĉ ĉ // ĠI Ġforgot Ġto Ġadd Ġthis Ġduring Ġthe Ġcontest . Ċĉĉĉĉĉ ĉ max d Ġ= Ġ 0 Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } Ċĉĉ ĉ } ĊĊĉ ĉ } ĊĊĊ ĉ } Ċ } ĊĊĊĊ Ċ fun Ġmain () Ġ{ Ċ ĉ val Ġdata : ĠInt Code Ġ= Ġget Int Code ( 2 0 1 9 _ 1 5 ) Ċ ĉ part 1 ( data ) Ċ }