import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
// 标准输入
Scanner input = new Scanner(System.in);
// 获取输入数组
while (input.hasNextLine()) {
String[] numStr = input.nextLine().split(" ");
// 将字符串数组转成双浮点数组后再处理
double[] nums = new double[numStr.length];
for (int i = 0; i < numStr.length; i++) {
nums[i] = Double.parseDouble(numStr[i]);
}
// 调用解析方法
boolean ans = judgePoint24(nums);
// 输出结果
System.out.println(ans);
}
}
// 使用递归判断输入数组能否计算出24点
private static boolean judgePoint24(double[] nums) {
// 设置递归出口
if (nums.length == 1) {
// 处理计算精度问题
return nums[0] > 23.999 && nums[0] < 24.001;
}
// 任选两数,通过运算符组成第三个数,进行后续的24点运算
// 此处不需考虑括号问题,因为是任选两数后所有运算符都参与,故有无括号的情况均包含在内
for (int x = 0; x < nums.length-1; x++) {
for (int y = x + 1; y < nums.length; y++) {
// 初始化标志位,记录是否能算出24
boolean isValid = false;
// 每次两数操作后,得到的新数组length-1
// 删除两操作数中的后者,然后在前者的位置放置新得的运算结果
double[] temp = new double[nums.length-1];
//copy待删除元素y的前部
System.arraycopy(nums, 0, temp, 0, y);
//copy待删除元素y的后部
System.arraycopy(nums, y + 1, temp, y, temp.length - y);
// 加法
temp[x] = nums[x] + nums[y];
isValid = isValid || judgePoint24(temp);
// 减法(减与被减)
temp[x] = nums[x] - nums[y];
isValid = isValid || judgePoint24(temp);
temp[x] = nums[y] - nums[x];
isValid = isValid || judgePoint24(temp);
// 乘法
temp[x] = nums[x] * nums[y];
isValid = isValid || judgePoint24(temp);
// 除法(除与被除),除数不得为0
if (nums[y] != 0) {
temp[x] = nums[x] / nums[y];
isValid = isValid || judgePoint24(temp);
}
if (nums[x] != 0) {
temp[x] = nums[y] / nums[x];
isValid = isValid || judgePoint24(temp);
}
// 计算完毕,若合法则返回
if (isValid) {
return true;
}
}
} // 双层循环结束
// 不合法
return false;
}
}