_=lambda n,S:n and _(n/M,S[1:])+(Z[n%M/C]+"hundred ")*(n%M>99)+(n%C>19and p("twen thir fo"+R,"ty")[n%C/10-2]+Z[n%10]or Z[n%C])+S[0]*(n%M>0)or"" p=lambda a,b="":[i+b+" "for i in a.split()] R="r fif six seven eigh nine" M=1000 C=100 Z=[""]+p("one two three four five%st nine ten eleven twelve"%R[5:20])+p("thir fou"+R,"teen") while 1:print _(input(),["","thousand "]+p("m b","illion"))[:-1]

Note that non-ascii characters in the above source code will be escaped (such as \x9f).