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