#include <iostream> #include <sstream> #include <string> #include <bitset> using namespace std; bool is_ip(const string& ip) { stringstream ss(ip); string token; while (getline(ss, token, '.')) { int n = stoi(token); if (n > 255 || n < 0) { return false; } } return true; } string get_binary_str(const string& ip) { string binary_str; stringstream ss(ip); string token; while (getline(ss, token, '.')) { bitset<8> b(stoi(token)); binary_str += b.to_string(); } return binary_str; } bool is_mask(const string& mask) { if (!is_ip(mask)) return false; string binary_str = get_binary_str(mask); bool seen_zero = false; for (const char& c : binary_str) { if (c == '0') { seen_zero = true; } if (c == '1' && seen_zero) { return false; } } return true; } int main() { string ip1, ip2, mask; while (cin >> mask >> ip1 >> ip2) { if (!is_ip(ip1) || !is_ip(ip2) || !is_mask(mask)) { cout << 1 << endl; continue; } string ip1_str = get_binary_str(ip1); string ip2_str = get_binary_str(ip2); string mask_str = get_binary_str(mask); for (int i = 0; i < 32; ++i) { if (mask_str[i] == '0') { ip1_str[i] = '0'; ip2_str[i] = '0'; } } cout << (ip1_str == ip2_str ? 0 : 2) << endl; } return 0; }