package Ġru . am ai . study . hack err ank . practice . inter view Pre paration Kit . search . swap Ċ Ċ import Ġjava . util .* Ċ Ċ fun Ġswap Nodes ( indexes : ĠArray < Array < Int >>, Ġqueries : ĠArray < Int >): ĠList < List < Int >> Ġ{ ĊĠĠĠ Ġval Ġroot Ġ= Ġbuild Tree ( indexes ) ĊĊĠĠĠ Ġreturn Ġqueries . map Ġ{ Ġswap Multiplier Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġquery Result Ġ= Ġmutable ListOf < Int >() ĊĠĠĠĠĠĠĠ Ġtraverse In Order With Sw aps ( root , Ġswap Multiplier ) Ġ{ Ġnode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Result Ġ+= Ġnode . index ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġquery Result ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġtraverse In Order With Sw aps ( ĊĠĠĠ Ġnode : ĠNode , ĊĠĠĠ Ġswap Multiplier : ĠInt , ĊĠĠĠ Ġlevel : ĠInt Ġ= Ġ 1 , ĊĠĠĠ Ġobserver : Ġ( Node ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġif Ġ( level Ġ% Ġswap Multiplier Ġ== Ġ 0 ) Ġnode . swap Sub Trees () ĊĊĠĠĠ Ġval Ġ(_, Ġleft , Ġright ) Ġ= Ġnode ĊĠĠĠ Ġleft ?. let Ġ{ Ġtraverse In Order With Sw aps ( left , Ġswap Multiplier , Ġlevel Ġ+ Ġ 1 , Ġobserver ) Ġ} ĊĠĠĠ Ġobserver ( node ) ĊĠĠĠ Ġright ?. let Ġ{ Ġtraverse In Order With Sw aps ( right , Ġswap Multiplier , Ġlevel Ġ+ Ġ 1 , Ġobserver ) Ġ} Ċ } Ċ Ċ private Ġfun Ġbuild Tree ( indexes : ĠArray < Array < Int >> ): ĠNode Ġ{ ĊĠĠĠ Ġval Ġnode Map Ġ= Ġmutable Map Of < Int , ĠNode >() ĊĠĠĠ Ġindexes . forEach Indexed Ġ{ Ġi , Ġ( l , Ġr ) Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġi Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ ĠlistOf ( p , Ġl , Ġr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ!= Ġ- 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġnode Map . put If Absent ( it , ĠNode ( it )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( l Ġ!= Ġ- 1 ) Ġnode Map . getValue ( p ). left Ġ= Ġnode Map . getValue ( l ) ĊĠĠĠĠĠĠĠ Ġif Ġ( r Ġ!= Ġ- 1 ) Ġnode Map . getValue ( p ). right Ġ= Ġnode Map . getValue ( r ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnode Map . getValue ( 1 ) Ċ } Ċ Ċ private Ġdata Ġclass ĠNode ( ĊĠĠĠ Ġval Ġindex : ĠInt , ĊĠĠĠ Ġvar Ġleft : ĠNode ? Ġ= Ġnull , ĊĠĠĠ Ġvar Ġright : ĠNode ? Ġ= Ġnull Ċ ) Ċ Ċ private Ġfun ĠNode . swap Sub Trees () Ġ{ ĊĠĠĠ Ġval Ġtmp Ġ= Ġleft ĊĠĠĠ Ġleft Ġ= Ġright ĊĠĠĠ Ġright Ġ= Ġtmp Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġscan Ġ= ĠScanner ( System .` in `) ĊĊĠĠĠ Ġval Ġn Ġ= Ġscan . nextLine (). trim (). toInt () ĊĊĠĠĠ Ġval Ġindexes Ġ= ĠArray ( n ) Ġ{ ĠArray ( 2 ) Ġ{ Ġ 0 Ġ} Ġ} ĊĊĠĠĠ Ġfor Ġ( indexes Row Itr Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġindexes [ indexes Row Itr ] Ġ= Ġscan . nextLine (). split (" Ġ"). map Ġ{ Ġit . trim (). toInt () Ġ}. to Typed Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġqueries Count Ġ= Ġscan . nextLine (). trim (). toInt () ĊĊĠĠĠ Ġval Ġqueries Ġ= ĠArray ( queries Count ) Ġ{ Ġ 0 Ġ} ĊĠĠĠ Ġfor Ġ( queries Itr Ġin Ġ 0 Ġuntil Ġqueries Count ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġqueries Item Ġ= Ġscan . nextLine (). trim (). toInt () ĊĠĠĠĠĠĠĠ Ġqueries [ queries Itr ] Ġ= Ġqueries Item ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġresult Ġ= Ġswap Nodes ( indexes , Ġqueries ) ĊĊĠĠĠ Ġprintln ( result . join ToString ("\ n ") Ġ{ Ġit . join ToString (" Ġ") Ġ}) Ċ } Ċ