package Ġcom . github . ker ub istan . ker ub . planner . steps Ċ Ċ import Ġcom . github . k 0 z ka . finder 4 j . back track . Step Factory Ċ import Ġcom . github . ker ub istan . ker ub . model . Expectation Ċ import Ġcom . github . ker ub istan . ker ub . planner . Operation al State Ċ import Ġcom . github . ker ub istan . ker ub . planner . Plan Ċ import Ġcom . github . ker ub istan . ker ub . planner . issues . problems . Problem Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* ĠAbstract Ġbase class Ġfor Ġstep Ġfactories . Ċ Ġ* ĠStep Ġfactories Ġshould Ġonly Ġcare Ġabout Ġthe Ġ< strong > poss ibility </ strong > Ġof Ġa Ġstep Ċ Ġ* Ġnot Ġthe Ġ< strong > fe as ibility </ strong > Ċ Ġ*/ Ċ abstract Ġclass ĠAbstract Operation al Step Factory < out ĠS Ġ: ĠAbstract Operation al Step > Ġ: ĠStep Factory < S , ĠPlan > Ġ{ Ċ ĉ // this Ġhere Ġis Ġonly Ġneeded Ġto Ġhave Ġsome Ġrestrictions Ġon Ġthe Ġmethod Ġsignature Ċ ĉ // like ĠList Ġand Ġnot ĠMutable List Ġand Ġno Ġnull Ġvalues Ġallowed Ċ ĉ abstract Ġfun Ġproduce ( state : ĠOperation al State ): ĠList < S > ĊĊ ĉ final Ġoverride Ġfun Ġproduce ( state : ĠPlan ): ĠList < S > Ġ= Ċĉĉ ĉ produce ( state . state ) ĊĊ ĉ abstract Ġval Ġproblem Hints Ġ: ĠSet < K Class < out ĠProblem >> ĊĊ ĉ abstract Ġval Ġexpectation Hints Ġ: ĠSet < K Class < out ĠExpect ation >> ĊĊ ĉ // ĠAll Ġimplementations Ġare Ġobjects , Ġso Ġa Ġshort Ġname Ġshould Ġbe Ġenough Ċ ĉ override Ġfun ĠtoString (): ĠString Ġ= Ġthis . java Class . simple Name Ċ Ċ }