# Topic : Brute_Force  _ 도영이가 만든 맛있는 음식
#
# Python 3 : 96ms
# 메모리 : 32460KB <- 메모리를 많이 쓴건가,,

from functools import reduce
import sys
from itertools import combinations

N = int(sys.stdin.readline())

# 신맛, 쓴맛 각각 저장
mat_s = []
mat_b = []
for _ in range(N):
  s , b = map(int,sys.stdin.readline().rstrip().split())
  mat_s.append(s)
  mat_b.append(b)

# 쓴맛과 신맛의 combination들의 차이를 각각 모두 저장
# 쓴맛, 신맛 두개의 리스트의 들어가는 요소들중 같은 인덱스를 가진 아이들은 재료로 매칭되는 아이들이다.
mat_s_diff = []
mat_b_diff = []
for i in range(1,N+1):
  tmp_s = combinations(mat_s,i)
  tmp_b = combinations(mat_b,i)

  # 신맛 곱하기
  for ts in tmp_s:
    # print("ts :",ts)
    mat_s_diff.append(reduce(lambda x, y: x * y, ts))

  # 쓴맛 더하기
  for tb in tmp_b:
    # print("tb :",tb)
    mat_b_diff.append(sum(tb))

# 쓴맛과 신맛 차이 저장
# mat_s_diff와 mat_b_diff의 차이를 구하는 do-while 문(인덱스가 같은 값을 빼준다.)
min = abs(mat_s_diff[0] - mat_b_diff[0])
for i in range(1,len(mat_s_diff)):
  diff = abs(mat_s_diff[i] - mat_b_diff[i])
  if diff < min:
    min = diff

print(min)

reduce func

>> 여러 개의 데이터를 대상으로 주로 누적 집계를 내기 위해서 사용

reduce(집계 함수, 순회 가능한 데이터, [초기값])

위 예시에서 아래와 같은 코드는 ts에 들어있는 모든 데이터를 대상으로 곱셈을 수행한다.

reduce(lambda x, y: x * y, ts)

→ ((ts[0] * ts[1]) * ts[2]) * ts[3] ...