using System.Collections.Generic;
private static IEnumerable<T[]> SolveMe<T>(int maxLength, IEnumerable<T> chars, IEqualityComparer<T> comparer = default) {
throw new ArgumentOutOfRangeException(nameof(maxLength));
throw new ArgumentNullException(nameof(chars));
var letters = chars.Distinct(comparer ?? EqualityComparer<T>.Default).ToArray();
for (var agenda = new Queue<T[]>(new[] { Array.Empty<T>() }); agenda.Peek().Length < maxLength;) {
var current = agenda.Dequeue();
foreach (var letter in letters) {
var next = current.Append(letter).ToArray();
public static void Main() {
List<char[]> result = SolveMe(3, "ab").ToList();
var report = string.Join(", ", result.Select(item => string.Concat(item)));