#include <iostream>
using namespace std;
int res1[6], res2[6];
int sd[6];
bool check1(int p[]) {
for (int i = 1; i <= 4; i++) {
if (p[i] < 0) {
return false;
}
}
for (int i = 2; i <= 4; i++) {
if (p[i] > p[i - 1]) {
return false;
}
}
return true;
}
bool check(int p[]) {
for (int i = 1; i <= 4; i++) {
if (p[i] > 255||p[i]<0) {
return false;
}
}
return true;
}
int main() {
string a, b, c;
while (cin >> a >> b >> c) {
int len = a.size(), len2 = b.size(), len3 = c.size();
int res = 0;
int j = 1;
int f = 0;
for (int i = 0; i < len; i++) {
if (a[i] == '-') {
f = 1;
i++;
// continue;
}
while (a[i] != '.' && i < len) {
res = res * 10 + (a[i] - '0');
i++;
}
if(f==1){
res*=-1;
f = 0;
}
sd[j++] = res;
res = 0;
}
j = 1;
res = 0,f = 0;
for (int i = 0; i < len2; i++) {
if (b[i] == '-') {
f = 1;
i++;
// continue;
}
while (b[i] != '.' && i < len2) {
res = res * 10 + (b[i] - '0');
i++;
}
if(f==1){
res*=-1;
f = 0;
}
res1[j++] = res;
res = 0;
}
j = 1;
res = 0;
for (int i = 0; i < len3; i++) {
if (c[i] == '-') {
f = 1;
i++;
// continue;
}
while (c[i] != '.' && i < len3) {
res = res * 10 + (c[i] - '0');
i++;
}
if(f==1){
res*=-1;
f = 0;
}
res2[j++] = res;
res = 0;
}
// for (int i = 1; i <= 4; i++) {
// cout << res1[i] << ' ' << res2[i] << ' ' << sd[i] << '\n';
// }
bool ok1 = check(res1);
bool ok2 = check(res2);
bool ok3 = check1(sd);
if (ok1 == ok2 && ok1 == true && ok1 == ok3) {
bool flag = true;
for (int i = 1; i <= 4; i++) {
int x = res1[i] & sd[i];
int y = res2[i] & sd[i];
if (x != y) {
flag = false;
break;
}
}
if (!flag) {
cout << "2\n";
} else {
cout << "0\n";
}
} else {
cout << "1\n";
}
// cout<<a[1]&sd[1]<<'\n';
}
return 0;
}
// 64 位输出请用 printf("%lld")
存储每个地址的十进制数字,注意有负数,然后分别进行&运算,模拟判断即可。



京公网安备 11010502036488号