package Ġhome work _ 1 Ċ Ċ import Ġjava . lang . Index OutOfBoundsException Ċ import Ġkotlinx . serialization . Serial Name Ċ import Ġkotlinx . serialization . Serializable Ċ Ċ /** Ċ Ġ* ĠMov es Ġan Ġelement Ġfrom Ġposition Ġ[ starting Index ] Ġto Ġposition Ġ[ final Index ] Ċ Ġ* Ġ@ param Ġstarting Index ĠThe Ġinitial Ġposition Ġof Ġthe Ġelement Ċ Ġ* Ġ@ param Ġfinal Index ĠEnd Ġposition Ġof Ġthe Ġelement Ċ Ġ*/ Ċ private Ġfun ĠArray Deque < Int >. move Element ( starting Index : ĠInt , Ġfinal Index : ĠInt ) Ġ{ ĊĠĠĠ Ġif Ġ( kotlin . math . max ( starting Index , Ġfinal Index ) Ġ>= Ġthis . size Ġ|| Ġkotlin . math . min ( starting Index , Ġfinal Index ) Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIndex OutOfBoundsException (" It Ġis Ġimpossible Ġto Ġre arrange Ġelements Ġwith Ġsuch Ġindexes .") ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġvalue Of Element Ġ= Ġthis [ starting Index ] ĊĠĠĠ Ġthis . remove At ( starting Index ) ĊĠĠĠ Ġthis . add ( final Index , Ġvalue Of Element ) Ċ } Ċ Ċ /** Ċ Ġ* ĠFor Ġactions Ġon Ġa Ġlist Ġof Ġnumbers Ġthat Ġcan Ġbe Ġund one Ċ Ġ*/ Ċ @ Serializable Ċ sealed Ġclass ĠAction Ġ{ ĊĠĠĠ Ġabstract Ġfun Ġexecute ( storage : ĠPer formed Command Storage ) ĊĠĠĠ Ġabstract Ġfun Ġundo ( storage : ĠPer formed Command Storage ) Ċ } Ċ Ċ /** Ċ Ġ* ĠClass Ġfor Ġadding Ġnumbers Ġto Ġthe Ġbeginning Ġof Ġa Ġlist Ċ Ġ* Ġ@ property Ġvalue ĠThe Ġvalue Ġof Ġthe Ġelement Ġwe Ġwant Ġto Ġadd Ċ Ġ*/ Ċ @ Serializable Ċ @ Serial Name (" Push Forward ") Ċ class ĠPush Forward ( private Ġval Ġvalue : ĠInt ) Ġ: ĠAction () Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġan Ġelement Ġto Ġthe Ġbeginning Ġof Ġthe Ġlist ĊĠĠĠĠ Ġ* Ġ@ param Ġstorage ĠThe Ġ[ Performed Command Storage ] Ġwe Ġwork Ġwith ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġexecute ( storage : ĠPer formed Command Storage ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstorage . array Deque . add First ( value ) ĊĠĠĠĠĠĠĠ Ġstorage . addAction ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġan Ġitem Ġfrom Ġthe Ġbeginning Ġof Ġthe Ġlist ĊĠĠĠĠ Ġ* Ġ@ param Ġstorage ĠThe Ġ[ Performed Command Storage ] Ġwe Ġwork Ġwith ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġundo ( storage : ĠPer formed Command Storage ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstorage . array Deque . remove First () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠClass Ġfor Ġadding Ġnumbers Ġto Ġthe Ġend Ġof Ġa Ġlist Ċ Ġ* Ġ@ property Ġvalue ĠThe Ġvalue Ġof Ġthe Ġelement Ġwe Ġwant Ġto Ġadd Ċ Ġ*/ Ċ @ Serializable Ċ @ Serial Name (" Push Back ") Ċ class ĠPush Back ( private Ġval Ġvalue : ĠInt ) Ġ: ĠAction () Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġan Ġelement Ġto Ġthe Ġend Ġof Ġthe Ġlist ĊĠĠĠĠ Ġ* Ġ@ param Ġstorage ĠThe Ġ[ Performed Command Storage ] Ġwe Ġwork Ġwith ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġexecute ( storage : ĠPer formed Command Storage ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstorage . array Deque . add Last ( value ) ĊĠĠĠĠĠĠĠ Ġstorage . addAction ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġan Ġitem Ġfrom Ġthe Ġend Ġof Ġthe Ġlist ĊĠĠĠĠ Ġ* Ġ@ param Ġstorage ĠThe Ġ[ Performed Command Storage ] Ġwe Ġwork Ġwith ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġundo ( storage : ĠPer formed Command Storage ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstorage . array Deque . remove Last () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġclass Ġthat Ġallows Ġyou Ġto Ġshift Ġan Ġitem Ġin Ġa Ġlist Ċ Ġ* Ġ@ property Ġstarting Index ĠThe Ġinitial Ġposition Ġof Ġthe Ġelement Ċ Ġ* Ġ@ property Ġfinal Index ĠEnd Ġposition Ġof Ġthe Ġelement Ċ Ġ*/ Ċ @ Serializable Ċ @ Serial Name (" Move Element ") Ċ class ĠMove Element ( private Ġval Ġstarting Index : ĠInt , Ġprivate Ġval Ġfinal Index : ĠInt ) Ġ: ĠAction () Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMov es Ġan Ġelement Ġfrom Ġposition Ġstarting Index Ġto Ġposition Ġfinal Index ĊĠĠĠĠ Ġ* Ġ@ param Ġstorage ĠThe Ġ[ Performed Command Storage ] Ġwe Ġwork Ġwith ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġexecute ( storage : ĠPer formed Command Storage ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstorage . array Deque . move Element ( starting Index , Ġfinal Index ) ĊĠĠĠĠĠĠĠ Ġstorage . addAction ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMov es Ġan Ġelement Ġfrom Ġposition Ġfinal Index Ġto Ġposition Ġstarting Index ĊĠĠĠĠ Ġ* Ġ@ param Ġstorage ĠThe Ġ[ Performed Command Storage ] Ġwe Ġwork Ġwith ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġundo ( storage : ĠPer formed Command Storage ) Ġ{ ĊĠĠĠĠĠ Ġstorage . array Deque . move Element ( final Index , Ġstarting Index ) ĊĠĠĠ Ġ} Ċ } Ċ