#include <iostream>
#include <vector>
using namespace std;
vector<size_t> ipToVector(string ip){
vector<size_t> v;
int pos = ip.find_first_of('.');
v.push_back(stoi(ip.substr(0,pos)));
ip = ip.substr(pos+1);
pos = ip.find_first_of('.');
v.push_back(stoi(ip.substr(0,pos)));
ip = ip.substr(pos+1);
pos = ip.find_first_of('.');
v.push_back(stoi(ip.substr(0,pos)));
ip = ip.substr(pos+1);
pos = ip.find_first_of('.');
v.push_back(stoi(ip.substr(0,pos)));
ip = ip.substr(pos+1);
return v;
}
bool isValidIp(string ip){
bool bisValid = true;
// 解析出每一段数字,判断是否在 0 到 255之间
vector<size_t> v = ipToVector(ip);
for(auto t : v){
if(t < 0 || t > 255){
bisValid = false;
}
}
return bisValid;
}
bool isValidMask(string ip){
bool bisValid = true;
// 先判断是否是合格IP
if(!isValidIp(ip)){
bisValid = false;
}else{
vector<size_t> v = ipToVector(ip);;
int len = v.size();
for(int i = 0; i < len -1; ++i){
if(v[i] < 255 && v[i+1] > 0){
bisValid = false;
}
}
}
return bisValid;
}
size_t ipToInt(string ip){
vector<size_t> v = ipToVector(ip);
size_t ans = 0;
for(auto t : v){
ans |= t;
ans = ans << 8;
}
return ans;
}
bool isSameNetWork(string ip1, string ip2, string mask){
size_t ip11 = ipToInt(ip1);
size_t ip22 = ipToInt(ip2);
size_t mask1 = ipToInt(mask);
return (ip11 & mask1) == (ip22 & mask1);
}
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")