#!/usr/bin/python def basen (base, num): q = num / base r = num % base if q == 0: return [r] else: return basen(base, q) + [r] def choose (list, number): iterations = len(list)**number for i in range(0, iterations): choice = basen(len(list), i) while len(choice) < number: choice.insert(0, 0) yield [ list[x] for x in choice ] digit_letters = { 2: [ 'a', 'b', 'c' ], 3: [ 'd', 'e', 'f' ], 4: [ 'g', 'h', 'i' ], 5: [ 'j', 'k', 'l' ], 6: [ 'm', 'n', 'o' ], 7: [ 'p', 'r', 's' ], 8: [ 't', 'u', 'v' ], 9: [ 'w', 'x', 'y' ] } letter_choices = [] for letters in choose([0,1,2], 4): letter_choices.append(letters) for digits in choose(range(2,10), 4): for letters in letter_choices: word = [] for i in range(0, len(digits)): digit = digits[i] letter_i = letters[i] letter = digit_letters[digit][letter_i] word.append(letter) print digits, ":", ''.join(word)