#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")