#include #define FOR(i,bg,ed) for(ll i=(bg);i<(ed);i++) #define REP(i,n) FOR(i,0,n) #define MOD 1000000007 #define int long long using namespace std; typedef long long ll; const int INF = 1e9; int n; int A[40], B[40]; set foo; int ans = 7e9; void dfs(int i, int t, int a, int b) { if (n == 1) { foo.insert(0); return; } if (i == t) { foo.insert(b - a); return; } dfs(i + 1, t, a + A[i], b); dfs(i + 1, t, a, b + B[i]); } void dfs2(int i, int t, int a, int b) { //cout << "i = " << i << endl; if (i == t) { int b_a = b - a; //auto it = lower_bound(foo.begin(), foo.end(), -b_a); auto it = foo.lower_bound(-b_a); if (it == foo.end()) { it--; } //cout << "AAA = " << *it << endl; //cout << "b_a = " << b_a << endl; ans = min(ans, abs(-b_a - *it)); if (it != foo.begin()) { it--; ans = min(ans, abs(-b_a - *it)); } return; } dfs2(i + 1, t, a + A[i], b); dfs2(i + 1, t, a, b + B[i]); } signed main() { cin >> n; REP(i,n) cin >> A[i] >> B[i]; dfs(0, n / 2, 0, 0); //cout << "BBB" << endl; //for (auto it=foo.begin(); it!=foo.end(); it++) { // cout << *it << endl; //} dfs2(n / 2, n, 0, 0); cout << ans << endl; }