#include <bits/stdc++.h>

using namespace std;

string str2bin(int num){
    if(num == 0) return "00000000";
    
    //cout << "num = " << num << endl;
    string binRes = "";
    string help = "0123456789ABCDEF";
    while(num){
        binRes += help[num % 2]; //二进制
        num /= 2;
    }
    reverse(binRes.begin(), binRes.end());
    while(binRes.size() < 8){
        binRes.insert(binRes.begin(), '0');
    } 
    //cout << "binRes = " << binRes << endl;
    return binRes;
}

bool noLegalYanMa(string zwYanMa){
    string res = "";
    stringstream iss(zwYanMa);
    string tmp = "";
    bool isNeg = false;
    while(getline(iss, tmp, '.')){       
        if(tmp[0] == '-'){
            isNeg = true;
            tmp = tmp.substr(1, tmp.size() - 1);
        } 
        //cout << "tmp = " << tmp << endl;
        int size = tmp.size();
        int num = 0;
        for(int i = 0; i < size; i++){
            num = num * 10 + (tmp[i] - '0');
        }
        if(isNeg) num = -num;
        
        //cout << "num==" << num << endl;
        if(num < 0 || num > 255) return true;
        
        res += str2bin(num);
    }
    //cout << "res = " << res << endl;
    bool notZero = true;
    for(int j = 0; j < res.size(); j++){
        if(res[j] == '0') {
            notZero = false;
        }
        else{
            if(!notZero){
                return true;
            }
            continue;
        }   
    }
    
    return false;
}

string str2binStr(string s){
    string res = "";
    stringstream iss(s);
    string tmp = "";
    while(getline(iss, tmp, '.')){
        //cout << "tmp = " << tmp << endl;       
        int size = tmp.size();
        int num = 0;
        for(int i = 0; i < size; i++){
            num = num * 10 + (tmp[i] - '0');
        }
        //cout << "num==" << num << endl;       
        res += str2bin(num);
    }
    
    return res;
}

bool noLegalIP(string IP){
    string res = "";
    stringstream iss(IP);
    string tmp = "";
    bool isNeg = false;
    while(getline(iss, tmp, '.')){
        if(tmp[0] == '-'){
            isNeg = true;
            tmp = tmp.substr(1, tmp.size() - 1);
        } 
        //cout << "tmp = " << tmp << endl;
        int size = tmp.size();
        int num = 0;
        for(int i = 0; i < size; i++){
            num = num * 10 + (tmp[i] - '0');
        }
        if(isNeg) num = -num;
        //cout << "num==" << num << endl; 
        if(num < 0 || num > 255) return true;
    }
    
    return false;
}

string anWeiSum(string zwYanMa, string IP){
    string s1 = str2binStr(zwYanMa);
    string s2 = str2binStr(IP);
    cout << s1 << endl;
    cout << s2 << endl;
    
    string res = "";
    int i = s1.size() - 1;
    int j = s2.size() - 1;
    int carry = 0; //进位
    while(i >= 0 || j >= 0){
        int digitA = i >= 0 ? (s1[i--] - '0') : 0; //i--
        int digitB = j >= 0 ? (s2[j--] - '0') : 0; //j--
        int sum = digitA + digitB + carry;
        carry = sum >= 2 ? 1 : 0;
        sum = sum >= 2 ? (sum - 2) : sum;
        
        res += to_string(sum);
    }
    if(carry == 1) res += "1";
    reverse(res.begin(), res.end());
    cout << res << endl;
    return res;
}

string anWeiYu(string zwYanMa, string IP){
    string s1 = str2binStr(zwYanMa);
    string s2 = str2binStr(IP);
    //cout << s1 << endl;
    //cout << s2 << endl;
    
    string res;
    for(int i = 0; i < 32; i++){
        if(s1[i] != s2[i]){
            res += "0";
        }
        else if(s1[i] == '0' && s2[i] == '0'){
            res += "0";
        }
        else{ //s1[i] == '1' && s2[i] == '1'
            res += "1";
        }
    }
    //cout << res << endl;
    return res;
}

bool isSameZiWang(string zwYanMa, string firstIP, string secondIP){
    if(anWeiYu(zwYanMa, firstIP) == anWeiYu(zwYanMa, secondIP)){
        return true;
    }
    return false;
}

void process(string zwYanMa, string firstIP, string secondIP, int& res){
    if(noLegalYanMa(zwYanMa) || noLegalIP(firstIP) || noLegalIP(secondIP)){
        res = 1;
        return;
    }

    if(isSameZiWang(zwYanMa, firstIP, secondIP)){
        res = 0;
    }
    else{
        res = 2;
    }
    
    return;
}

int main(){
    string zwYanMa = "";
    string firstIP = "";
    string secondIP = "";
    getline(cin, zwYanMa);
    getline(cin, firstIP);
    getline(cin, secondIP);
    int res = 0;

    process(zwYanMa, firstIP, secondIP, res);
    //anWeiYu(zwYanMa, firstIP);
    cout << res << endl;
    return 0;
}