public IEnumerator <IEnumerable <Move> > GetEnumerator() { return(ListUtility.EnumerateShortLexNonempty(SwapComponents.Count).Select(cf => EnumerateMoves(cf)).GetEnumerator()); }