def something_about_bases(number, bonus=False):
    assert isinstance(number, str)

    a = -ord('a') + 10
    nums = [ord(n) + a if n.isalpha() else int(n) for n in number]

    smallest_base = max(nums) + 1
    top_base = 16 if bonus else smallest_base

    for base in range(smallest_base, top_base + 1):
        val = sum(n * base ** (len(nums) - i - 1) for i, n in enumerate(nums))
        print("base %i => %i" % (base, val))

inputs = ['1', '21', 'ab3', 'ff']
for i in inputs:
    something_about_bases(i)

# bonus 1
print('')
something_about_bases('21', bonus=True)

# bonus 2
print('')
something_about_bases('0')