#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 验证IP地址
# @param IP string字符串 一个IP地址字符串
# @return string字符串
#
class Solution:

    """
    Ipv4 : 
    1. 十进制和点表示
    2.4个十进制数
    3.用. 分开
    4. 最短 0.0.0.0    len=7   最长 255.255.255.255  len=12+3
    Ipv6: 
    1. 8组用:分开
    2.不能出现空组 ::
    3.不能出现多余的0 : 0000
    4. 每组是16进制数 不能出现A-F a-f 1-9 之外的字符

    没有空格或其他字符

    测试用例:
    "2001:0dFG:85a3:0:0:8A2E:0370:7334"  G 超出范围 

    """
    def solve(self , IP: str) -> str:
        # write code here
        print(IP)
        def ipv4(IP):
            if len(IP)<7 or len(IP)>15:
                return "Neither"
            ips=IP.split(".")
            #print(ips)
            if len(ips)!=4:
                return "Neither"
            for it in ips:
                if   it[0]=='0' and len(it)>1:
                    return "Neither"
                for i in it:
                    print(i)
                    if ord(i)-ord('0')>9: # 不是数字
                        return "Neither"
                if int(it)>255:
                    return "Neither"

            return "IPv4"
        def ipv6(IP):
            if "::" in IP:
                return "Neither"
            ips=IP.split(":")
            if  len(ips)!=8:
                return "Neither"
            for it in  ips:
                if len(it)>4:
                    return "Neither"
                for ch in it:  # 过滤掉不是16进制的
                    if 'F'<ch<'Z' or 'f'<ch<'z':
                        return "Neither" 
            # print(ips)
            # for it in  ips:
            #     if it[0]=='0' and len(it)>1:
            #         return "Neither"

            return "IPv6"
        # if  not IP:
        #     return "Neither"
        if "." in IP:
            return ipv4(IP)
        elif ":" in IP:
            return ipv6(IP)
        else:
            return "Neither"