using System.Collections.Generic;
public static void Main()
var flags = GetPermutations(new[] {"a", "b", "c", "d", "e"})
.Select(a => string.Join(",", a.ToArray()))
Console.WriteLine(string.Join("\n", flags));
public static IEnumerable<IEnumerable<T>> GetPermutations<T>(T[] items)
return GetPermutations(items, 0)
.OrderBy(x => x.Count());
private static IEnumerable<IEnumerable<T>> GetPermutations<T>(T[] items, int start)
for (var pos = start; pos < items.Length; pos++)
yield return new[] { items[pos] };
foreach (var permutations in GetPermutations(items, pos + 1))
yield return new[] { items[pos] }.Concat(permutations);