// 真是又臭又长的代码  20240927
#include <iostream>
#include <vector>
using namespace std;

bool isValidIp(string ip){
    bool bisValid = true;
    // 解析出每一段数字,判断是否在 0 到 255之间
    vector<string> v;
    int pos = ip.find_first_of('.');
    v.push_back(ip.substr(0,pos));
    ip = ip.substr(pos+1);

    pos = ip.find_first_of('.');
    v.push_back(ip.substr(0,pos));
    ip = ip.substr(pos+1);

    pos = ip.find_first_of('.');
    v.push_back(ip.substr(0,pos));
    ip = ip.substr(pos+1);

    pos = ip.find_first_of('.');
    v.push_back(ip.substr(0,pos));
    ip = ip.substr(pos+1);

    for(auto s : v){
        int t = stoi(s);
        if(t < 0 || t > 255){
            bisValid = false;
        } 
    }
    return bisValid;
}

bool isValidMask(string ip){
    bool bisValid = true;
    // 先判断是否是合格IP
    if(!isValidIp(ip)){
        bisValid = false;
    }else{
        vector<string> v;
        int pos = ip.find_first_of('.');
        v.push_back(ip.substr(0,pos));
        ip = ip.substr(pos+1);

        pos = ip.find_first_of('.');
        v.push_back(ip.substr(0,pos));
        ip = ip.substr(pos+1);

        pos = ip.find_first_of('.');
        v.push_back(ip.substr(0,pos));
        ip = ip.substr(pos+1);

        pos = ip.find_first_of('.');
        v.push_back(ip.substr(0,pos));
        ip = ip.substr(pos+1);

        size_t ans = 0;
        int len = v.size();
        for(int i = 0; i < len -1; ++i){
            int vi = stoi(v[i]);
            int vii = stoi(v[i+1]);

            if(vi < 255 && vii > 0){
                bisValid = false;
            }
        }
    }
    return bisValid;
}

size_t ipToInt(string ip){
    vector<string> v;
    int pos = ip.find_first_of('.');
    v.push_back(ip.substr(0,pos));
    ip = ip.substr(pos+1);

    pos = ip.find_first_of('.');
    v.push_back(ip.substr(0,pos));
    ip = ip.substr(pos+1);

    pos = ip.find_first_of('.');
    v.push_back(ip.substr(0,pos));
    ip = ip.substr(pos+1);

    pos = ip.find_first_of('.');
    v.push_back(ip.substr(0,pos));
    ip = ip.substr(pos+1);

    size_t ans = 0;
    for(auto s : v){
        size_t t = stoi(s);
        ans |= t;
        ans = ans << 8;
    } 
    return ans;
}

bool isSameNetWork(string ip1, string ip2, string mask){
    bool bisSame = true;
    size_t ip11 = ipToInt(ip1);
    size_t ip22 = ipToInt(ip2);
    size_t mask1 = ipToInt(mask);

    size_t and1 = (ip11 & mask1);
    size_t and2 = (ip22 & mask1);

    return and1 == and2;
}

int main() {
    string mask, ip1, ip2;
    while(cin >> mask >> ip1 >> ip2){
        if(!isValidMask(mask) || !isValidIp(ip1) || !isValidIp(ip2)){
            cout << 1 << endl;
            continue;
        }

        if(isSameNetWork(ip1,ip2,mask)){
            cout << 0 << endl;  // 属于同一网络打印 0
        }else{
            cout << 2 << endl; // 不属于同一网络打印 2
        }
    }
}
// 64 位输出请用 printf("%lld")