#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;
}