public override BeltPlan CalculatePlan() { List <Input> inputs = new List <Input>(); foreach (decimal d in BeltsIn) { inputs.Add(new Input(Context, d)); } BeltPlan plan = new BeltPlan(Context, ImmutableList.CreateRange(inputs)); List <List <Output> > allNodes = new List <List <Output> >(); foreach (Input input in inputs) { (input as ISplittable).Split(BeltsOut); allNodes.Add(input.GetFinalOutputs()); } for (int i = 0; i < BeltsOut; i++) { Merger merger = new Merger(Context); foreach (List <Output> nodes in allNodes) { merger.AddInputSafe(nodes[i]); } } plan.Simplify(); return(plan); }