def METHOD_NAME(self, number):
    digits = [c for c in str(number)]
    length = len(digits)
    if length >= 66:
        raise NotImplementedError("The given number is too large.")
    # This is how many digits come before the "illion" term.
    #   cento miliardi => 3
    #   dieci milioni => 2
    #   un miliardo => 1
    predigits = length % 3 or 3
    multiplier = digits[:predigits]
    exponent = digits[predigits:]
    # Default infix string: "milione", "biliardo", "sestilione", ecc.
    infix = exponent_length_to_string(len(exponent))
    if multiplier == ["1"]:
        prefix = "un "
    else:
        prefix = self.to_cardinal(int("".join(multiplier)))
        # Plural form      ~~~~~~~~~~~
        infix = " " + infix[:-1] + "i"
    # Read as: Does the value of exponent equal 0?
    if set(exponent) != set("0"):
        postfix = self.to_cardinal(int("".join(exponent)))
        if " e " in postfix:
            infix += ", "
        else:
            infix += " e "
    else:
        postfix = ""
    return prefix + infix + postfix