import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 标准输入
        Scanner input = new Scanner(System.in);
        // 获取输入的子网掩码和两个ip地址
        String mask = input.next();
        String ip1 = input.next();
        String ip2 = input.next();
        // 解析本组数据
        parse(mask, ip1, ip2);
    }

    // 解析数据
    private static void parse(String mask, String ip1, String ip2) {
        // 校验子网掩码
        if (!isLegalMask(mask)) {
            System.out.println(1);
            return;
        }
        // 校验ip地址
        if (!isLegal_ip(ip1) || !isLegal_ip(ip2)) {
            System.out.println(1);
            return;
        }

        // 判断两ip地址是否在同一子网
        String binary_ip1 = getBinary(ip1);
        String binary_ip2 = getBinary(ip2);
        String binary_mask = getBinary(mask);
        // 获取掩码中1的个数
        int count = 0;
        for (char c : binary_mask.toCharArray()) {
            if (c == '1') count++;
        }
        // 按1的个数截取两ip的开头,比较其是否相等
        String temp1 = binary_ip1.substring(0,count);
        String temp2 = binary_ip2.substring(0,count);
        // 判断后输出结果
        if (temp1.equals(temp2)) {
            System.out.println(0);
        } else {
            System.out.println(2);
        }
    }

    // 判断ip地址是否合法
    private static boolean isLegal_ip(String ip) {
        // 正则表达式首次过滤
        if (!ip.matches("(\\d+\\.){3}\\d+")) return false;
        // 通过过滤的数据在形式上均为4数字+3个点

        // 二次过滤
        String[] nums = ip.split("\\.");
        for (String num : nums) {
            // 长度不为1,但以0开头
            if (num.length() != 1 && num.startsWith("0")) return false;
            // 数值越界
            int n = Integer.parseInt(num);
            if (n < 0 || 255 < n) return false;
        }
        // 通过过滤,校验合格
        return true;
    }

    // 判断子网掩码是否合法
    private static boolean isLegalMask(String mask) {
        // 先判断其是否为合法的ip
        if (!isLegal_ip(mask)) return false;

        // 二次过滤,校验子网掩码的二进制形式
        String binaryMask = getBinary(mask);
        if (!binaryMask.matches("[1]+[0]+")) return false;
        // 通过校验,子网掩码合法
        return true;
    }

    // 将ip地址转换为二进制形式
    private static String getBinary(String ip) {
        // 初始化
        StringBuffer binary = new StringBuffer();
        // 拼接二进制形式
        String[] nums = ip.split("\\.");
        for (String num : nums) {
           // 十进制字符串转十进制数字
           int n = Integer.parseInt(num);
           // 十进制数字转二进制字符串
           String tempBinary = Integer.toBinaryString(n);
           // 将二进制字符串补全至8位
           while (tempBinary.length() < 8) {
               tempBinary = "0" + tempBinary;
           }
           // 拼接二进制字符串
           binary.append(tempBinary);
        }
        // 返回拼接结果
        return binary.toString();
    }
}