package Ġcom . a oc . int code . amp l ifier Ċ Ċ import Ġjava . util .* Ċ Ċ data Ġclass ĠPhase Settings ( val Ġinput : ĠSet < Int >) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsettings : ĠQueue < Int > Ġ= ĠLinkedList () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( input . size Ġ!= Ġ 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" A ĠPhase Settings Ġmust Ġhave Ġexactly Ġ 5 Ġphase Ġsettings ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinput . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ< Ġ 0 Ġ|| Ġit Ġ> Ġ 9 ) Ġthrow ĠIllegalArgumentException (" Phase Ġsettings Ġmust Ġbe Ġbetween Ġ 0 Ġand Ġ 9 Ġ( inclusive )") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsettings . addAll ( input ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Setting (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( settings . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsettings . poll (). to Long () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegal Caller Exception (" Invalid Ġsetting Ġrequest . ĠThere Ġare Ġno Ġphase Ġsettings Ġremaining ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠgetAll Possible Phase Setting Combin ations ( phase Setting Values : ĠList < Int >): ĠList < Phase Settings > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinteger Array Per mutations Ġ= ĠInteger Array Per mutations () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġper mutations Ġ= Ġinteger Array Per mutations . get Per mutations For Integer Array ( phase Setting Values ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġper mutations . map Ġ{ ĠPhase Settings ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠInteger Array Per mutations Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġper mutations Ġ= Ġmutable ListOf < Set < Int >>() ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġperm ute ( input : ĠList < Int >, Ġk : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġk Ġuntil Ġinput . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCollections . swap ( input , Ġi , Ġk ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperm ute ( input , Ġk Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCollections . swap ( input , Ġk , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( k Ġ== Ġinput . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġper mutations . add ( input . toSet ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Per mutations For Integer Array ( values : ĠList < Int >): ĠMutable List < Set < Int >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperm ute ( values , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġper mutations ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ }