while True:
    try:
        a=list(map(int,input().strip('\n').split('.')))
        b=list(map(int,input().strip('\n').split('.')))
        c=list(map(int,input().strip('\n').split('.')))
        boolean=0
        for i in range(0,len(a)-1):
            if a[i]==0 and a[i+1]!=0:
                boolean=1
                break
            elif a[i]<255 and a[i+1]>0:
                boolean=1
                break
            elif a[i]^255!=255-a[i] or a[i+1]^255!=255-a[i+1]:
                boolean=1
                break
        if len(a)!=4 or len(b)!=4 or len(c)!=4:
            boolean=1
        elif max(a)>255 or max(b)>255 or max(c)>255:
            boolean=1
        elif min(a)<0 or min(b)<0 or min(c)<0:
            boolean=1
        elif boolean!=1:
            for i in range(0,4):
                if a[i]&b[i]!=a[i]&c[i]:
                    boolean=2
        print(boolean)
    except:
        break

首先,我们检验一下子网掩码是否左边全是1,右边全是0。

那么左边不全是1,右边不全是0的情况有:

1、x.x.0.y

2、1110111.x.x.x

3、255.y.0.0(y<255 &y>0)

然后,再检验三者的长度

三者中各自最大值,最小值是否超标

最后比较B与C与A的AND运算是否相等