#include<iostream>
#include<algorithm>
using namespace std;
char ops[4] = {'+', '-', '*', '/'};
//两数计算
double cal(double db1, double db2, char op) {
double result;
switch (op) {
case '+':
result = db1 + db2;
break;
case '-':
result = db1 - db2;
break;
case '*':
result = db1 * db2;
break;
case '/':
result = db1 / db2;
break;
};
return result;
};
int main() {
double num[4];
cin >> num[0] >> num[1] >> num[2] >> num[3];
sort(num, num + 4); //初始化为最小排序
do //生成所有排列
{//顺序计算,不加括号
for (int i = 0; i < 4; i++) {
double res;
if (i == 3 && num[1] == 0)continue;
else res = cal(num[0], num[1], ops[i]);
for (int j = 0; j < 4; j++) {
if (j == 3 && num[2] == 0)continue;
else res = cal(res, num[2], ops[j]);
for (int k = 0; k < 4; k++) {
if (k == 3 && num[3] == 0)continue;
else res = cal(res, num[3], ops[k]);
if (res == 24) {
cout << "true";
return 0;
}
}
}
}
//加括号,先计算num[1]和num[2]
for (int i = 0; i < 4; i++) {
double val12;
double res;
if (i == 3 && num[2] == 0)continue;
else val12 = cal(num[1], num[2], ops[i]);
//再计算val12和num[3]
for (int j = 0; j < 4; j++) {
if (j == 3 && num[3] == 0)continue;
else res = cal(val12, num[3], ops[j]);
for (int k = 0; k < 4; k++) {
if (k == 3 && res == 0)continue;
else res = cal(num[0], res, ops[k]);
if (res == 24) {
cout << "true";
return 0;
}
}
}
//再顺序计算
for (int j = 0; j < 4; j++) {
if (j == 3 && val12 == 0)continue;
else res = cal(num[0], val12, ops[j]);
for (int k = 0; k < 4; k++) {
if (k == 3 && num[3] == 0)continue;
else res = cal(res, num[3], ops[k]);
if (res == 24) {
cout << "true";
return 0;
}
}
}
}
//加括号,先计算num[2]和num[3]
for (int i = 0; i < 4; i++) {
double val23;
double res;
if (i == 3 && num[3] == 0)continue;
else val23 = cal(num[2], num[3], ops[i]);
//再计算val23和num[1]
for (int j = 0; j < 4; j++) {
if (j == 3 && num[1] == 0)continue;
else res = cal(val23, num[1], ops[j]);
for (int k = 0; k < 4; k++) {
if (k == 3 && num[0] == 0)continue;
else res = cal(res, num[0], ops[k]);
if (res == 24) {
cout << "true";
return 0;
}
}
}
//再顺序计算
for (int j = 0; j < 4; j++) {
if (j == 3 && num[1] == 0)continue;
else res = cal(num[0], num[1], ops[j]);
for (int k = 0; k < 4; k++) {
if (k == 3 && val23 == 0)continue;
else res = cal(res, val23, ops[k]);
if (res == 24) {
cout << "true";
return 0;
}
}
}
}
} while (next_permutation(num,num + 4)); //next_permutation() 按字典序生成下一个排列,直到最大排列(如 [4,3,2,1])后返回 false。
cout << "false";
return 0;
}