#include <iostream>
#include <array>
using namespace std;
bool check(array<int, 4>&arr){
for (int i = 0; i < 4; i++)
if (arr[i] < 0 || arr[i] > 255)
return 0;
return 1;
}
string to2(int n){//---------转二进制但不补前导零
string s = "";
while (n){
s = (char)(n % 2 + '0') + s;
n>>=1;
}
return s;
}
bool check(array<int, 4>&arr, int n){//----------重载check函数,用于检测子网是否前零后一,思路是模拟
bool flag = 0;
int i = 0;
while (i < 4 && arr[i] == 255) i++;
int j = 0;
string s = to2(arr[i]);
size_t size = s.size();
while (j < size && s[j] == '1') j++;
while (j < size){
if (s[j] != '0')
flag = 1;
j++;
}
i++;
while(i < 4 && arr[i] == 0) i++;
if (i != 4) flag = 1;
return flag != 1;
}
int main() {
array<int, 4> a, b, c;
auto for_rd = [&](array<int, 4>& arr){//------获取输入
char c;
cin>>arr[0];
for (int i = 1; i < 4; i++){
cin >> c;cin >> arr[i];
}
};
auto operate = [&](){for(int i=0;i<4;i++){b[i]=a[i]&b[i];c[i]&=a[i];}};//--------这个可以直接展开不用这样写的
for_rd(a);for_rd(b);for_rd(c);
if (check(a) && check(b) && check(c) && check(a, 0)){
operate();
bool flag = 0;
for (int i = 0; i < 4; i++){
if (b[i] != c[i]) flag = 1;
}
if (flag) cout << 2 << endl;
else cout << 0 << endl;
}
else{
cout << 1 << endl;
}
return 0;
}
// 64 位输出请用 printf("%lld")