const d = require('fs').readFileSync(0, 'utf8').split(/\s+/); const n = +d[0]; const a = new Array(n); for (let i = 0; i < n; i++) a[i] = +d[1 + i]; let S = 0; for (const v of a) S += v; const half = n / 2; const nl = n >> 1; const L = a.slice(0, nl), R = a.slice(nl); const nr = R.length; const byCount = (arr) => { const res = Array.from({ length: arr.length + 1 }, () => []); const size = 1 << arr.length; for (let m = 0; m < size; m++) { let sum = 0, cnt = 0, mm = m, i = 0; while (mm) { if (mm & 1) { sum += arr[i]; cnt++; } mm >>= 1; i++; } res[cnt].push(sum); } return res; }; const lsum = byCount(L), rsum = byCount(R); for (const list of rsum) list.sort((x, y) => x - y); let best = Infinity; for (let i = 0; i <= nl; i++) { const j = half - i; if (j < 0 || j > nr) continue; const rs = rsum[j]; if (!rs.length) continue; for (const ls of lsum[i]) { const target2 = S - 2 * ls; let lo = 0, hi = rs.length - 1, pos = rs.length; while (lo <= hi) { const mid = (lo + hi) >> 1; if (2 * rs[mid] >= target2) { pos = mid; hi = mid - 1; } else lo = mid + 1; } for (let k = pos - 1; k <= pos; k++) { if (k < 0 || k >= rs.length) continue; const diff = Math.abs(2 * (ls + rs[k]) - S); if (diff < best) best = diff; } } } console.log(best);