pub fn shortlex_ordered_unique_vecs_min_length<I: Clone + Iterator>(
    min_length: u64,
    xs: I
) -> ShortlexOrderedUniqueCollections<I, Vec<I::Item>> 
where I::Item: Clone,
Expand description

Generates Vecs with a mininum length, with elements from a single iterator, such that each Vec has no repeated elements, and the elements in each Vec are ordered the same way as they are in the source iterator.

The Vecs are generated in order of increasing length, and within each length they are ordered lexicographically with respect to the order of the element iterator.

The source iterator should not repeat any elements, but this is not enforced.

The iterator should be finite; if it is infinite, Vecs of length \max(2, \ell + 1) and above will never be generated.

If the input iterator is infinite, the output length is also infinite.

If the input iterator length is $n$ and the min_length is $\ell$, the output length is $$ \sum_{i=\ell}^n \binom{n}{i}. $$

§Examples

use itertools::Itertools;
use malachite_base::vecs::exhaustive::shortlex_ordered_unique_vecs_min_length;

let xss = shortlex_ordered_unique_vecs_min_length(2, 1..=4).collect_vec();
assert_eq!(
    xss.iter().map(Vec::as_slice).collect_vec().as_slice(),
    &[
        &[1, 2][..],
        &[1, 3],
        &[1, 4],
        &[2, 3],
        &[2, 4],
        &[3, 4],
        &[1, 2, 3],
        &[1, 2, 4],
        &[1, 3, 4],
        &[2, 3, 4],
        &[1, 2, 3, 4]
    ]
);