import string, sys

num_dict = { 0:  "zero",
             1:  "one",
             2:  "two",
             3:  "three",
             4:  "four",
             5:  "five",
             6:  "six",
             7:  "seven",
             8:  "eight",
             9:  "nine",
             10: "ten",
             11: "eleven",
             12: "twelve",
             13: "thirteen",
             14: "fourteen",
             15: "fifteen",
             16: "sixteen",
             17: "seventeen",
             18: "eighteen",
             19: "nineteen",
             20: "twenty",
             30: "thirty",
             40: "forty",
             50: "fifty",
             60: "sixty",
             70: "seventy",
             80: "eighty",
             90: "ninety",
             }

epochs = ( (1000,       "thousand"),
           (1000000,    "million"),
           (1000000000, "billion")
           )

def num_to_string(n):

    if n < 0:
        return "minus " + num_to_string(-n)

    if num_dict.has_key(n):
        return num_dict[n]

    if n < 100:
        return num_to_string((n/10)*10) + " " + num_to_string(n % 10)

    if n < 1000:
        x = num_to_string((n/100)) + " hundred"
        if n % 100:
            if n % 100 < 10:
                x += " and"
            x += " " + num_to_string(n % 100)
        return x

    for q, name in epochs:
        if n <= 1000*q:
            x = num_to_string(n/q) + " " + name
            if n % q:
                x += " " + num_to_string(n % q)
            return x


    return None
