package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
var mask, ip1, ip2 string
fmt.Scanf("%s\n%s\n%s", &mask, &ip1, &ip2)
masks := strings.SplitN(mask, ".", -1)
ip1s := strings.SplitN(ip1, ".", -1)
ip2s := strings.SplitN(ip2, ".", -1)
if len(ip1s) != 4 || len(ip2s) != 4 || len(masks) != 4 {
fmt.Println(1)
return
}
var mask0 = false
var flag = 0
for i := 0; i < 4; i++ {
m, err := strconv.ParseUint(masks[i], 10, 32)
if err != nil {
fmt.Println(1)
return
}
first, err := strconv.ParseUint(ip1s[i], 10, 32)
if err != nil {
fmt.Println(1)
return
}
second, err := strconv.ParseUint(ip2s[i], 10, 32)
if err != nil {
fmt.Println(1)
return
}
if first > 255 || second > 255 || m > 255 {
fmt.Println(1)
return
}
if (first&m) != (second&m) {
flag = 2
}
// 判断掩码中1是否连续
for j := 7; j >= 0; j-- {
if (1<<j)& m == 0 {
mask0 = true
} else if mask0 {
fmt.Println(1)
return
}
}
}
fmt.Println(flag)
}