using System.Collections.Generic;
public static void Main()
var combinations = GetCombination(words);
var permutations = combinations.SelectMany(x => GetPermutations(x, x.Count()));
permutations.Select(x => string.Join("", x)).ToList().ForEach(Console.WriteLine);
static IEnumerable<List<string>> GetCombination(List<string> list)
double count = Math.Pow(2, list.Count);
for (int i = 1; i <= count - 1; i++)
string str = Convert.ToString(i, 2).PadLeft(list.Count, '0');
List<string> strings = new List<string>();
for (int j = 0; j < str.Length; j++)
static IEnumerable<IEnumerable<T>> GetPermutations<T>(IEnumerable<T> list, int length)
if (length == 1) return list.Select(t => new T[] { t });
return GetPermutations(list, length - 1)
.SelectMany(t => list.Where(e => !t.Contains(e)),
(t1, t2) => t1.Concat(new T[] { t2 }));