class ĠUpdate Matrix { ĊĠĠĠ Ġfun Ġupdate Matrix ( matrix : ĠArray < IntArray >) Ġ: ĠArray < IntArray > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmapped Values Ġ= Ġmutable Map Of < Pair < Int , Int >, Int >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġmatrix . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġmatrix [ 0 ]. indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( matrix [ i ][ j ] Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapped Values [ Pair ( i , j )] Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġqueue Ġ= Ġmapped Values . keys . to Mutable List () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( queue . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Pair Ġ= Ġqueue . remove At ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpossible Pairs Ġ= Ġmutable ListOf < Pair < Int , Int >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Down ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Pair . first Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpossible Pairs . add ( Pair ( current Pair . first - 1 , current Pair . second )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// UP ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Pair . first Ġ< Ġmatrix . last Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpossible Pairs . add ( Pair ( current Pair . first + 1 , current Pair . second )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Pair . second Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpossible Pairs . add ( Pair ( current Pair . first , current Pair . second - 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Right ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Pair . second Ġ< Ġmatrix [ 0 ]. last Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpossible Pairs . add ( Pair ( current Pair . first , current Pair . second + 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpossible Pairs . filter Ġ{ Ġ! mapped Values . containsKey ( it ) Ġ}. forEach { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapped Values [ it ] Ġ= Ġmapped Values [ current Pair ] !! + 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġreturn List Ġ= Ġmutable ListOf < Mutable List < Int >>() ĊĠĠĠĠĠĠĠ Ġfor ( Ġi Ġin Ġmatrix . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn List . add ( mutable ListOf ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( j Ġin Ġmatrix [ 0 ]. indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn List [ i ]. add ( mapped Values [ Pair ( i , j )] !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġreturn List . map Ġ{ Ġit . to IntArray () Ġ}. to Typed Array () ĊĠĠĠ Ġ} Ċ }