def scientific_notation(value: float | str, precision: int = 2) -> str:
    """Return number in string scientific notation z.wq x 10ⁿ.

    Examples:
        >>> scientific_notation(float(0.3))
        '3.00 x 10⁻¹'
        >>> scientific_notation(int(500))
        '5.00 x 10²'
        >>> scientific_notation(-1000)
        '1.00 x 10⁻³'
        >>> scientific_notation(1000, 1)
        '1.0 x 10³'
        >>> scientific_notation(1000, 3)
        '1.000 x 10³'
        >>> scientific_notation("99")
        '9.90 x 10¹'

    Args:
        value: input number.
        precision: number of decimal for first part of the number.

    Returns:
        str: Number in scientific notation z.wq x 10ⁿ.
    """
    exponents = {
        "0": "⁰",
        "1": "¹",
        "2": "²",
        "3": "³",
        "4": "⁴",
        "5": "⁵",
        "6": "⁶",
        "7": "⁷",
        "8": "⁸",
        "9": "⁹",
        "-": "⁻",
    }
    negative = False

    if "-" in str(value):
        value = str(value).replace("-", "")
        negative = True

    if isinstance(value, str):
        value = float(value)

    precision_number = f"{value:.{precision}e}"

    significand, exponent = precision_number.split("e")
    # remove extra 0
    if exponent[1] == "0":
        exponent = exponent[0] + exponent[2:]
    # remove + sign
    if exponent[0] == "+":
        exponent = exponent[1:]

    formatted_exponent = []
    if negative:
        formatted_exponent.append(exponents["-"])

    for char in exponent:
        formatted_exponent.append(exponents[char])

    return f"{significand} x 10{''.join(formatted_exponent)}"