public static IEnumerable <EMSSMove> Generate(LinearLinkage lle) { var groupItems = new List <int>(); var lleb = lle.ToBackLinks(); for (var i = 0; i < lle.Length; i++) { foreach (var move in GenerateForItem(i, groupItems, lle, lleb)) { yield return(move); } if (lleb[i] != i) { groupItems.Remove(lleb[i]); } groupItems.Add(i); } }