1336d762aSopenharmony_ciuse std::collections::BTreeSet; 2336d762aSopenharmony_ci 3336d762aSopenharmony_cipub fn all<T>(input: &[T]) -> BTreeSet<BTreeSet<T>> 4336d762aSopenharmony_ciwhere 5336d762aSopenharmony_ci T: Ord + Eq + Clone, 6336d762aSopenharmony_ci{ 7336d762aSopenharmony_ci let mut permutations = BTreeSet::new(); 8336d762aSopenharmony_ci 9336d762aSopenharmony_ci if input.is_empty() { 10336d762aSopenharmony_ci return permutations; 11336d762aSopenharmony_ci } 12336d762aSopenharmony_ci 13336d762aSopenharmony_ci permutations.insert(input.iter().cloned().collect()); 14336d762aSopenharmony_ci 15336d762aSopenharmony_ci if input.len() > 1 { 16336d762aSopenharmony_ci for t in input { 17336d762aSopenharmony_ci let p = input 18336d762aSopenharmony_ci .iter() 19336d762aSopenharmony_ci .filter(|pt| *pt != t) 20336d762aSopenharmony_ci .cloned() 21336d762aSopenharmony_ci .collect::<Vec<_>>(); 22336d762aSopenharmony_ci 23336d762aSopenharmony_ci for pt in all(&p) { 24336d762aSopenharmony_ci permutations.insert(pt); 25336d762aSopenharmony_ci } 26336d762aSopenharmony_ci } 27336d762aSopenharmony_ci } 28336d762aSopenharmony_ci 29336d762aSopenharmony_ci permutations 30336d762aSopenharmony_ci} 31