fac = [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880] numbers = [0]*10000000 numbers[0] = 1 numbers[1] = 1 numbers[2] = 1 numbers[145] = 1 numbers[40585] = 1 numbers[169] = 3 numbers[871] = 2 numbers[872] = 2 numbers[45361] = 2 numbers[45362] = 2 numbers[1454] = 3 numbers[363601] = 3 def next(n): x = 0 while n > 0: x += fac[n % 10] n /= 10 return x def count(n): if numbers[n] != 0: return chain = [n] x = next(n) while x not in chain: chain.append(x) if numbers[x] != 0: break x = next(x) last = numbers[chain[-1]] l = len(chain) for j in xrange(0, l-1): c = chain[j] numbers[c] = l - j - 1 + last c = 0 for i in xrange(10, 1000000): count(i) if numbers[i] == 60: c += 1 print c