描述: IPV4地址可以用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此正号不需要出现),如10.137.17.1,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。现在需要你用程序来判断IP是否合法。
数据范围:数据组数:1\le t\le 18\1≤t≤18 
进阶:时间复杂度:O(n)\O(n) ,空间复杂度:O(n)\O(n) 
输入描述:输入一个ip地址,保证不包含空格
输出描述:返回判断的结果YES or NO
输入:
255.255.255.1000
输出:
NO
# print(int('11111111',2),int('00000000',2))
# 255 0
# print(bin(100)) 生成二进制

def exam(instr):
    
    ins = instr
    num_lis = ['.','0','1','2','3','4','5','6','7','8','9']
    # print(set(ins))
    # {'.', '2', '1', '5', '0'}
    lis = ins.split('.')
    # print(lis)
    # ['', '1', '3', '8']
    if len(lis) != 4:
        # 分裂后发现总段数不为0段落,案例: 1.3.8
        return 'NO'
    for i in set(ins):
        if i not in num_lis:
            # -1.0.1.3
            return 'NO'
    for i in lis:
        # 段数为4段,但内部有缺失值,在.分裂后,案例:.1.3.8
        if i == '':
            return 'NO'
        if len(i) != 1 and i[0] == '0':
            # 每个段落出现0开头的字符问题,则长度大于2且首字母为0
            # 0.1.2.3是合法IP,需要再加个长度不为1判断
            # 01.2.3.8
            # 0.1.3.8
            return 'NO'
        
    ip = list(map(int,ins.split('.')))
    # print(ip)
    # [255, 255, 255, 1000]
    for j in ip:
        # print(j)
        if j > 255:
            return 'NO'
        else:
            continue
    return 'YES'

while True:
    try:
        instr = input()
        res = exam(instr=instr)
        print(res)
    except:
        break
# print(bin(255))