package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
a:=""
b:=""
c:=""
fmt.Scan(&a)
fmt.Scan(&b)
fmt.Scan(&c)
var str1=strings.Split(a, ".");
var str2=strings.Split(b, ".");
var str3=strings.Split(c, ".")
isSuceess:=0
isvlan:=0
if len(str1)==4 && len(str2)==4 && len(str3)==4{
for i:=0;i<4;i++{
vlan,err :=strconv.Atoi(str1[i])
if err!=nil{
fmt.Print(1);
return;
}
ip1,err :=strconv.Atoi(str2[i])
if err!=nil{
fmt.Print(1);
return;
}
ip2,err :=strconv.Atoi(str3[i])
if err!=nil{
fmt.Print(1);
return;
}
if ip1>255||ip1<0{
fmt.Print(1);
return;
}
if ip2>255||ip2<0{
fmt.Print(1);
return;
}
if vlan>0&&isvlan>0{
fmt.Print(1);
return;
}
if vlan>255||vlan<0{
fmt.Print(1);
return;
}else if(vlan!=255){
isvlan=1
}
if ((255-vlan)&(256-vlan)!=0){
fmt.Print(1);
return;
}
if ip1&vlan!=ip2&vlan{
isSuceess=1
}
}
if (isSuceess==1) {
fmt.Print(2);
return;
}
fmt.Print(0);
}else{
fmt.Print(1)
}
}