using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static long[] NList => ReadLine().Split().Select(long.Parse).ToArray(); static long[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); public static void Main() { Solve(); } static void Solve() { var n = NN; var map = NArr(n); var fh = 1 << n / 2; var sh = 1 << n - n / 2; var flist = new List(); for (var b = 0; b < fh; ++b) { var tmp = b; var sum = 0L; for (var i = 0; i < n / 2; ++i) { if (tmp % 2 == 0) sum += map[i][0]; else sum -= map[i][1]; tmp >>= 1; } flist.Add(sum); } var slist = new List(); for (var b = 0; b < sh; ++b) { var tmp = b; var sum = 0L; for (var i = n / 2; i < n; ++i) { if (tmp % 2 == 0) sum += map[i][0]; else sum -= map[i][1]; tmp >>= 1; } slist.Add(sum); } slist.Sort(); var ans = long.MaxValue; foreach (var fi in flist) { var pos = LowerBound(0, -fi, slist); if (pos < slist.Count) ans = Math.Min(ans, Math.Abs(fi + slist[pos])); if (pos > 0) ans = Math.Min(ans, Math.Abs(fi + slist[pos - 1])); } WriteLine(ans); } static int LowerBound(int left, long min, IList list) { if (list[left] >= min) return left; var ng = left; var ok = list.Count; while (ok - ng > 1) { var mid = (ng + ok) / 2; if (list[mid] < min) ng = mid; else ok = mid; } return ok; } }