#!/usr/bin/env python

def crypt (t):
	ret = 0
	for i in range (len (t)):
		ret += (i + 1) * ord (t[i])
	return ret

import sys
target = int (sys.argv[-1])

if sys.argv[1] == '-a':
	def solve (s, pos, t):
		if pos >= len (s):
			if crypt (s) == t:
				print ''.join (s)
			return
		for i in range (0x30, 0x3a):
			s[pos] = chr (i)
			if crypt (s) > t:
				break
			solve (s, pos + 1, t)
		s[pos] = ' '
	for l in range (1, int (target ** .5)):
		if target % l != 0:
			continue
		t = target / l
		low = crypt (chr (32) * l)
		high = crypt (chr (126) * l)
		if not low <= t <= high:
			continue

		s = [' '] * l
		solve (s, 0, t)
else:
	l = 1
	while l ** 2 < target:
		if target % l == 0:
			t = target / l
			low = crypt (chr (32) * l)
			high = crypt (chr (127) * l)
			if low <= t <= high:
				# This is a candidate for a solution.
				s = [' '] * l
				for i in range (len (s) - 1, -1, -1):
					left = t - crypt (s)
					s[i] = chr (min (126, 32 + left / (i + 1)))
				if t != crypt (s):
					print 'no solution with length %d?' % l
				else:
					print 'Solution: "%s"' % ''.join (s)
					break
		l += 1
