import sys from itertools import combinations from fractions import Fraction def main(): n = int(sys.stdin.readline()) input_numbers = list(map(int, sys.stdin.readline().split())) numbers = [Fraction(num) for num in input_numbers] memo = {} def generate(nums): sorted_nums = tuple(sorted(nums)) if sorted_nums in memo: return memo[sorted_nums] if len(nums) == 1: result = {nums[0]} memo[sorted_nums] = result return result possible = set() length = len(nums) for i in range(length): for j in range(length): if i == j: continue a = nums[i] b = nums[j] remaining = [] for k in range(length): if k != i and k != j: remaining.append(nums[k]) # Perform all operations # Addition add = a + b possible.update(generate(remaining + [add])) # Subtraction a - b sub_ab = a - b possible.update(generate(remaining + [sub_ab])) # Subtraction b - a sub_ba = b - a possible.update(generate(remaining + [sub_ba])) # Multiplication mul = a * b possible.update(generate(remaining + [mul])) # Division a / b if b != Fraction(0): div_ab = a / b possible.update(generate(remaining + [div_ab])) # Division b / a if a != Fraction(0): div_ba = b / a possible.update(generate(remaining + [div_ba])) memo[sorted_nums] = possible return possible for split_size in range(1, (n // 2) + 1): for s_combination in combinations(numbers, split_size): s = list(s_combination) t_set = set(numbers) - set(s_combination) t = list(t_set) possible_s = generate(s) possible_t = generate(t) if possible_s & possible_t: print("YES") return print("NO") if __name__ == "__main__": main()