Create a function that transforms any positive number to a string representing the number in words.  The function should work for all numbers between 0 and 999999.

### Examples

```
number2words(0)  ==>  "zero"
number2words(1)  ==>  "one"
number2words(9)  ==>  "nine"
number2words(10)  ==>  "ten"
number2words(17)  ==>  "seventeen"
number2words(20)  ==>  "twenty"
number2words(21)  ==>  "twenty-one"
number2words(45)  ==>  "forty-five"
number2words(80)  ==>  "eighty"
number2words(99)  ==>  "ninety-nine"
number2words(100)  ==>  "one hundred"
number2words(301)  ==>  "three hundred one"
number2words(799)  ==>  "seven hundred ninety-nine"
number2words(800)  ==>  "eight hundred"
number2words(950)  ==>  "nine hundred fifty"
number2words(1000)  ==>  "one thousand"
number2words(1002)  ==>  "one thousand two"
number2words(3051)  ==>  "three thousand fifty-one"
number2words(7200)  ==>  "seven thousand two hundred"
number2words(7219)  ==>  "seven thousand two hundred nineteen"
number2words(8330)  ==>  "eight thousand three hundred thirty"
number2words(99999)  ==>  "ninety-nine thousand nine hundred ninety-nine"
number2words(888888)  ==>  "eight hundred eighty-eight thousand eight hundred eighty-eight"
```

```python

USER_FILENAME = "<user_code>"
import sys, json, builtins
import math, heapq, bisect, itertools, functools, collections, statistics, fractions, decimal, operator, array, random, re, string, os, pathlib
try:
    import resource as _res
except Exception:
    _res = None
from collections import Counter, defaultdict, deque, OrderedDict
from functools import lru_cache, reduce
from itertools import accumulate, permutations, combinations, product
from math import gcd, ceil, floor, sqrt
from decimal import Decimal
try:
    from typing import *
except Exception:
    pass
try:
    sys.setrecursionlimit(1_000_000)
except Exception:
    pass
try:
    import site as _site
    try:
        _sys_sites = _site.getsitepackages() if hasattr(_site, "getsitepackages") else []
        for _p in _sys_sites:
            if _p and _p not in sys.path:
                sys.path.append(_p)
    except Exception:
        pass
    try:
        _usp = _site.getusersitepackages()
        if isinstance(_usp, str):
            _usp = [_usp]
        for _p in _usp:
            if _p and _p not in sys.path:
                sys.path.append(_p)
    except Exception:
        pass
except Exception:
    pass

def _disabled_input(*args, **kwargs):
    raise RuntimeError("input() is disabled in callable mode")
builtins.input = _disabled_input

ns = {"__name__": "__judge__"}  # prevent if __name__ == "__main__" blocks
for _k, _v in list(globals().items()):
    if not _k.startswith("_"):
        ns[_k] = _v
_CODE = 'special = {\n    \'0\': \'zero\',\n    \'1\': \'one\',\n    \'2\': \'two\',\n    \'3\': \'three\',\n    \'4\': \'four\',\n    \'5\': \'five\',\n    \'6\': \'six\',\n    \'7\': \'seven\',\n    \'8\': \'eight\',\n    \'9\': \'nine\',\n    \'10\': \'ten\',\n    \'11\': \'eleven\',\n    \'12\': \'twelve\',\n    \'13\': \'thirteen\',\n    \'14\': \'fourteen\',\n    \'15\': \'fifteen\',\n    \'16\': \'sixteen\',\n    \'17\': \'seventeen\',\n    \'18\': \'eighteen\',\n    \'19\': \'nineteen\',\n    \'20\': \'twenty\',\n    \'30\': \'thirty\',\n    \'40\': \'forty\',\n    \'50\': \'fifty\',\n    \'60\': \'sixty\',\n    \'70\': \'seventy\',\n    \'80\': \'eighty\',\n    \'90\': \'ninety\'\n}\ndef three_digits2words(s):\n    \'\'\' len of s should <= 3 \'\'\'\n    s = str(int(s)) # remove leading 0s\n    if s in special:\n        return special[s]\n    if len(s) == 2:\n        return \'{}-{}\'.format(special[s[0]+\'0\'], special[s[1]])\n    else:\n        lower2 = three_digits2words(s[1:])\n        return \'{} hundred\'.format(special[s[0]]) + ((" " + lower2) if lower2 != \'zero\' else \'\')\n\ndef number2words(n):\n    """ works for numbers between 0 and 999999 """\n    s = str(n)\n    lower3 = three_digits2words(s[-3:])\n    if len(s) > 3:\n        return "{} thousand".format(three_digits2words(s[:-3])) + ((" " + lower3) if lower3 != \'zero\' else \'\')\n    else:\n        return lower3'
_co = compile(_CODE, USER_FILENAME, "exec")
exec(_co, ns, ns)

_target = None
_fn_name = 'number2words'
if _fn_name:
    if "Solution" in ns:
        try:
            _obj = ns["Solution"]()
            if hasattr(_obj, _fn_name):
                _target = getattr(_obj, _fn_name)
        except Exception:
            _target = None
    if _target is None and _fn_name in ns and callable(ns[_fn_name]):
        _target = ns[_fn_name]
# Fallback: if there's exactly one user-defined function, use it
if _target is None:
    _cands = [v for k, v in ns.items() if callable(v) and getattr(v, "__module__", "") in ("__judge__", "__main__")]
    _user_funcs = [c for c in _cands if getattr(c, "__name__", "").startswith("_") is False]
    if len(_user_funcs) == 1:
        _target = _user_funcs[0]
if _target is None:
    raise RuntimeError(f"Could not resolve callable '{_fn_name}'")

_raw = sys.stdin.read().strip()
if _raw:
    _parsed = json.loads(_raw)
    if isinstance(_parsed, dict):
        _kwargs = _parsed.get("kwargs", {})
        _args = _parsed.get("args", [])
    else:
        _args, _kwargs = _parsed, {}
else:
    _args, _kwargs = [], {}
if not isinstance(_args, (list, tuple)):
    _args = [_args]
_res = _target(*_args, **_kwargs)
try:
    sys.stdout.write(repr(_res) + "\n")
except Exception:
    pass

```

Measured memory_bytes: 5900