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";
}
};