using System.Collections.Generic;
public static void Main()
var value = ReadInteger("Please provide a number: ");
var digits = new Stack<int>(GetDigits(value).Reverse());
foreach (var combinaison in GetCombinations(digits))
Console.WriteLine(GetString(combinaison));
static IEnumerable<IReadOnlyList<int>> GetCombinations(Stack<int> stack)
return GetCombinationsImplem(stack, new Stack<int>());
static IEnumerable<IReadOnlyList<int>> GetCombinationsImplem(Stack<int> inStack, Stack<int> outStack)
yield return outStack.ToArray();
var digit1 = inStack.Pop();
if (digit1 >= 1 && digit1 <= 26)
foreach (var combinaison in GetCombinationsImplem(inStack, outStack))
yield return combinaison;
var digit2 = inStack.Pop();
var v = digit1 + 10 * digit2;
foreach (var combinaison in GetCombinationsImplem(inStack, outStack))
yield return combinaison;
static IEnumerable<int> GetDigits(int value)
static string GetString(IReadOnlyCollection<int> digits)
var sb = new StringBuilder(digits.Count);
sb.Append(string.Join("|", digits));
foreach (var digit in digits)
sb.Append((char)('a' + digit - 1));
static int ReadInteger(string caption)
var line = Console.ReadLine();
if (line != null && int.TryParse(line, out value))
Console.WriteLine("This was not a number.");