import javax.imageio.metadata.IIOMetadataNode; import javax.security.sasl.SaslClient; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String maskCode = sc.nextLine(); String ip1 = sc.nextLine(); String ip2 = sc.nextLine(); if (isMaskCodeLawful(maskCode) && isIpLawful(ip1) && isIpLawful(ip2)) { System.out.println(isInSameInternet(maskCode, ip1, ip2)); } else { System.out.println(1); } } private static int isInSameInternet(String maskCode, String ip1, String ip2) { String[] mask = maskCode.split("\\."); String[] nums1 = ip1.split("\\."); String[] nums2 = ip2.split("\\."); for (int i = 0; i < 4; i++) { if ((Integer.parseInt(mask[i]) & Integer.parseInt(nums1[i])) != (Integer.parseInt(mask[i]) & Integer.parseInt(nums2[i])) ) { return 2; } } return 0; } private static boolean isIpLawful(String ip) { String[] nums = ip.split("\\."); for (String num : nums) { if (Integer.parseInt(num) > 255 || Integer.parseInt(num) < 0) { return false; } } return true; } private static boolean isMaskCodeLawful(String maskCode) { if(!isIpLawful(maskCode)){ return false; } String[] nums = maskCode.split("\\."); //最后一个1的位置 等于 所有1的数量 String totalBinStr = ""; for (String num : nums) { String binStr = Integer.toBinaryString(Integer.parseInt(num)); while (binStr.length() < 8) { binStr = "0" + binStr; } totalBinStr += binStr; } int count = 0; for (char c : totalBinStr.toCharArray()) { if (c == '1') { count++; } } if ((count - 1) == totalBinStr.lastIndexOf("1")) { return true; } return false; } }