def METHOD_NAME(icao: str) -> None | str:
    """Convert an a- ICAO address to a N-number registration
    >>> icao_to_n_number("a00001")
    'N1'
    >>> icao_to_n_number("a0001a")
    'N1AZ'
    >>> icao_to_n_number("a0001b")
    'N1B'
    >>> icao_to_n_number("a00724")
    'N1000Z'
    >>> icao_to_n_number("a00725")
    'N10000'
    >>> icao_to_n_number("a00752")
    'N1002'
    >>> icao_to_n_number("a00c22")
    'N102A'
    >>> icao_to_n_number("ac6a7a")
    'N9A'
    >>> icao_to_n_number("adf7c7")
    'N99999'
    """
    icao = icao.lower()
    if not a_pattern.match(icao):
        raise RuntimeError(f"{icao} is not a valid US register ICAO address")
    output = "N"  # digit 0 = N
    value = int(icao[1:], base=16) - 1  # parse icao to int
    if value < 0:
        return output
    dig1 = int(value / factors[0]) + 1  # digit 1
    rem1 = value % factors[0]
    output += str(dig1)
    if rem1 < 601:
        return output + get_suffix(rem1)
    rem1 -= 601  # shift for digit 2
    dig2 = int(rem1 / factors[1])
    rem2 = rem1 % factors[1]
    output += str(dig2)
    if rem2 < 601:
        return output + get_suffix(rem2)
    rem2 -= 601  # shift for digit 3
    dig3 = int(rem2 / factors[2])
    rem3 = rem2 % factors[2]
    output += str(dig3)
    if rem3 < 601:
        return output + get_suffix(rem3)
    rem3 -= 601  # shift for digit 4
    dig4 = int(rem3 / factors[3])
    rem4 = rem3 % factors[3]
    output += str(dig4)
    if rem4 == 0:
        return output
    # find last character
    return output + (charset + string.digits)[rem4 - 1]