Напиши на Python 3.12 модуль с функцией ```python def fmt(value, spec: str) -> str: ... ``` которая для чисел повторяет встроенную функцию `format(value, spec)` из CPython 3.12. Результат должен совпадать с `format` символ в символ. Если `format` бросает `ValueError`, функция тоже должна бросить `ValueError` (текст сообщения не важен). ## Что поддерживается `value` имеет тип `int` или `float` (не `bool`). Строка формата устроена так: ``` [[fill]align][sign]["z"]["#"]["0"][width][grouping]["." precision][type] ``` - `fill`: любой символ; `align`: `<`, `>`, `^` или `=`. - `sign`: `+`, `-` или пробел. - `z`, `#`, `0`: флаги, как в Python. - `width` и `precision`: десятичные числа, `width` не больше 200, `precision` не больше 1100. - `grouping`: `,` или `_`. - `type` для `int`: пустой, `d`, `b`, `o`, `x`, `X` или любой из типов для `float` ниже. - `type` для `float`: `e`, `E`, `f`, `F`, `g`, `G`, `%`. Значения `float` бывают любыми, в том числе `-0.0`, бесконечности, NaN и денормализованные числа. Целые бывают до 10^40 по модулю. Типы `c` и `n`, а также `float` с пустым типом в проверке не встречаются. ## Ограничения Встроенным форматированием пользоваться нельзя: функцией `format`, методами `str.format` и `__format__`, f-строками, оператором `%` для строк, функцией `repr`, а также `str()` от `float`. Нельзя импортировать `decimal`, `locale`, `string` и сторонние пакеты. `str()` от целого числа можно, `math`, `fractions` и `float.as_integer_ratio()` тоже. Решение, которое нарушает ограничение, получает ноль. Скорость важна: 20 000 вызовов со случайными форматами должны укладываться в 1 секунду, и 600 чисел с точностью около 1000 знаков тоже в 1 секунду. ## Формат ответа Сначала продумай решение, затем ответь модулем в одном блоке ```python.