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 = 'def number2words(n):\n    if n == 0: return "zero"\n    if n == 10: return "ten"\n    \n    numbers_11_19={\n    "0":"ten",\n    "1":"eleven",\n    "2":"twelve",\n    "3":"thirteen",\n    "4":"fourteen",\n    "5": "fifteen",\n    "6":"sixteen",\n    "7":"seventeen",\n    "8":"eighteen",\n    "9":"nineteen"\n    }\n    numbers_1_9={\n    "0":"",\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    }\n    numbers_20_100={\n    "0":"",\n    "2":"twenty",\n    "3":"thirty",\n    "4":"forty",\n    "5":"fifty",\n    "6":"sixty",\n    "7":"seventy",\n    "8":"eighty",\n    "9":"ninety",\n    }\n  \n    nStr=str(n)\n    print (nStr)\n    s=""\n    L=len(nStr)\n    pos=0\n    if pos==L-6:#4 simvol sotni tisyzcg\n        s+=numbers_1_9.get(nStr[pos])\n        if nStr[pos]!="0":s+=" hundred "\n        pos+=1\n    if pos==L-5:#4simvol - desytki ticych\n        if nStr[pos]=="1": #11 - 19\n            s+=numbers_11_19.get(nStr[pos+1])\n            pos=+1\n        else:\n            s+=numbers_20_100.get(nStr[pos])\n            if nStr[pos+1]!="0" and nStr[pos]!="0" : s+="-"\n        pos+=1\n    if pos==L-4:#3 simvol - tisycha\n        if nStr[pos-1]!="1": s+=numbers_1_9.get(nStr[pos])\n        s+=" thousand "\n        pos+=1\n    if pos==L-3:#2 simbol - sotka\n        s+=numbers_1_9.get(nStr[pos])\n        if nStr[pos]!="0":s+=" hundred "\n        pos+=1\n    if pos==L-2: #1 simvol, desytok\n        if nStr[pos]=="1": #11 - 19\n            s+=numbers_11_19.get(nStr[pos+1])\n            pos=-1\n        else:\n            s+=numbers_20_100.get(nStr[pos])\n            if nStr[pos+1]!="0" and nStr[pos]!="0" : s+="-"\n        pos+=1\n    if pos==L-1: #0 simvol, edinici\n        s+=numbers_1_9.get(nStr[pos]) \n    return s.strip()'
_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: 6454