import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 验证IP地址
     * @param IP string字符串 一个IP地址字符串
     * @return string字符串
     */
    public String solve (String IP) {
        // write code here
        if(isIPv4(IP))return "IPv4";
        else if(isIPv6(IP))return "IPv6";
        else return "Neither";
    }
    private boolean isIPv4(String IP){
        if(IP.indexOf(".") == -1)return false;
        String[] s = IP.split("\\.");
        if(s.length != 4)return false;
        for(int i = 0; i < 4; i++){
            if(s[i].length() == 0)return false;
            if(s[i].length() > 3 || (s[i].charAt(0)=='0' && s[i].length() != 1))return false;
            int num = 0;
            for(int j = 0; j < s[i].length(); j++){
                char c = s[i].charAt(j);
                if(c < '0' || c > '9')return false;
                num = num*10+(c-'0');
            }
            if(num > 255)return false;
        }
        return true;
    }
    private boolean isIPv6(String IP){
        if(IP.indexOf(":") == -1)return false;
        String[] s = IP.split(":", -1);
        if(s.length != 8)return false;
        for(int i = 0; i < 8; i++){
            if(s[i].length() == 0 || s[i].length() > 4)return false;
            for(int j = 0; j < s[i].length(); j++){
                char c = s[i].charAt(j);
                boolean flag = (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F');
                if(!flag)return false;
            }
        }
        return true;
    }
}

/**
在Java中, split() 方法用于将字符串拆分为子字符串数组,根据指定的分隔符来划分原始字符串。在这种情况下,参数 -1 表示将保留原始字符串中的所有尾部空字符串。如果不使用 -1 参数,则默认情况下, split() 方法会删除尾部的空字符串。因此,使用 -1 参数可以确保尾部的空字符串也会被保留在结果数组中。
 */