from functools import lru_cache def compute_possible_values(nums): @lru_cache(maxsize=None) def helper(nums_tuple): if len(nums_tuple) == 1: return {nums_tuple[0]} results = set() for i in range(len(nums_tuple) - 1): a = nums_tuple[i] b = nums_tuple[i+1] for op in ['+', '-', '*', '/']: if op == '+': res = a + b elif op == '-': res = a - b elif op == '*': res = a * b elif op == '/': if b == 0: continue res = a / b new_tuple = nums_tuple[:i] + (res,) + nums_tuple[i+2:] sub_results = helper(new_tuple) results.update(sub_results) return results return helper(tuple(nums)) n = int(input()) nums = list(map(int, input().split())) found = False for k in range(1, n): left = nums[:k] right = nums[k:] left_res = compute_possible_values(left) right_res = compute_possible_values(right) if left_res.intersection(right_res): found = True break print("YES" if found else "NO")