#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 验证IP地址
# @param IP string字符串 一个IP地址字符串
# @return string字符串
#
class Solution:
    def IPV4(self, IP):
        # 检查点号的数量是否为 3
        if IP.count(".") != 3:
            return "Neither"
        ipv4_list = IP.split(".")
        # IPv4 地址必须由 4 部分组成
        if len(ipv4_list) != 4:
            return "Neither"
        for part in ipv4_list:
            # 检查每一部分是否为空
            if part == "":
                return "Neither"
            try:
                num_int = int(part)
                # 检查数字范围是否在 0 - 255 之间
                if num_int > 255 or num_int < 0:
                    return "Neither"
                # 检查是否有多余的前导 0
                if len(part) > 1 and part[0] == "0":
                    return "Neither"
            except ValueError:
                return "Neither"
        return "IPv4"

    def IPV6(self, IP):
        # 检查冒号的数量是否为 7
        if IP.count(":") != 7:
            return "Neither"
        ipv6_list = IP.split(":")
        # IPv6 地址必须由 8 部分组成
        if len(ipv6_list) != 8:
            return "Neither"
        valid_chars = set('0123456789abcdefABCDEF')
        for part in ipv6_list:
            # 检查每一部分的长度是否在 1 - 4 之间
            if len(part) < 1 or len(part) > 4:
                return "Neither"
            # 检查每一部分是否只包含合法的十六进制字符
            for char in part:
                if char not in valid_chars:
                    return "Neither"
        return "IPv6"

    def solve(self, IP: str) -> str:
        output = ""
        if "." in IP and ":" not in IP:
            output = self.IPV4(IP)
        elif ":" in IP and "." not in IP:
            output = self.IPV6(IP)
        else:
            output = "Neither"
        return output