# https://yukicoder.me/problems/no/3697 def main(): N = int(input()) A = list(map(int ,input().split())) sum_a = sum(A) # 半分全列挙 N1 = N // 2 bit_map = [0] * (2 ** N1) for bit in range(2 ** N1): ans = 0 for i in range(N1): if bit & (1 << i) > 0: ans += A[i] bit_map[bit] = ans N2 = N // 2 bit_value_arrays = [set() for _ in range(N2 + 1)] for bit in range(2 ** N2): ans = 0 bit_count = 0 for i in range(N2): if bit & (1 << i) > 0: bit_count += 1 ans += A[i + N1] bit_value_arrays[bit_count].add(ans) for x in range(N2 + 1): bit_value_arrays[x] = list(bit_value_arrays[x]) bit_value_arrays[x].sort() answer = float("inf") for bit in range(2 ** N1): a1 = bit_map[bit] bit_count = 0 for i in range(N1): if bit & (1 << i) > 0: bit_count += 1 b_count = N // 2 - bit_count bit_value_array = bit_value_arrays[b_count] # sum_a >= 2 * aのケース if 2 * (bit_value_array[0] + a1) <= sum_a: low = 0 high = len(bit_value_array) - 1 border = sum_a // 2 - a1 while high - low > 1: mid = (high + low) // 2 if bit_value_array[mid] <= border: low = mid else: high = mid if bit_value_array[high ] <= border: x = bit_value_array[high] else: x = bit_value_array[low] a = a1 + x ans = sum_a - 2 * a answer = min(answer, ans) # sum_a <= 2 * aのケース if 2 * (bit_value_array[-1] + a1) >= sum_a: low = 0 high = len(bit_value_array) - 1 border = (sum_a + 1) // 2 - a1 while high - low > 1: mid = (high + low) // 2 if bit_value_array[mid] >= border: high = mid else: low = mid if bit_value_array[low] >= border: x = bit_value_array[low] else: x = bit_value_array[high] a = a1 + x ans = 2 * a - sum_a answer = min(answer ,ans) print(answer) if __name__ == "__main__": main()