class Solution {
public:
    /**
     * 验证IP地址
     * @param IP string字符串 一个IP地址字符串
     * @return string字符串
     */
    bool ipv4(string IP){
        if(IP.empty()||IP.size()>3) return false;
        int num=0;
        for(int i=0;i<IP.size();i++){
            num+=IP[i]-'0';
            if(num==0&&i!=IP.size()-1) return false;
            num*=10;
        }
        if(num>2550||num<0) return false;
        return true;
    }
    bool ipv6(string IP){
        if(IP.empty()||IP.size()>4) return false;
        for(int i=0;i<IP.size();i++){
            if(IP[i]<='9'&&IP[i]>='0') continue;
            else if (IP[i]<='F'&&IP[i]>='A') continue;
            else if (IP[i]<='f'&&IP[i]>='a') continue;
            return false;
        }
        return true;
    }
    int split(string IP){
        int flag1=0;
        int flag2=0;
        int temp=0;
        for(int i=0;i<IP.size();i++){
            if(IP[i]=='.'){
                if(flag1==2||flag2>2) return 0;
                flag1=1;
                flag2+=1;
                if(!ipv4(IP.substr(temp,i-temp))) return 0;
                temp=i+1;
            }
            else if (IP[i]==':') {
                if(flag1==1||flag2>6) return 0;
                flag1=2;
                flag2+=1;
                if(!ipv6(IP.substr(temp,i-temp))) return 0;
                temp=i+1;
            }
        }
        if(flag1==1){
            if(!ipv4(IP.substr(temp,IP.size()-temp))) return 0;
            return 1;
        }
        else if (flag1==2) {
            if(!ipv6(IP.substr(temp,IP.size()-temp))) return 0;
            return 2;
        }
        else {
            return 0;
        }
    }
    string solve(string IP) {
        // write code here
        int ans=split(IP);
        if(ans==1){
            return "IPv4";
        }
        else if(ans==2){
            return "IPv6";
        }
        else return "Neither";
    }
};