#include #define rep(i,a,b) for(int i=a;i solve(vector &a) { vector res; int n = a.size(); rep(mask, 0, 1 << n) { ll d = 0; rep(i, 0, n) { if (mask & (1 << i)) d += A[a[i]]; else d -= B[a[i]]; } res.push_back(d); } sort(res.begin(), res.end()); res.erase(unique(res.begin(), res.end()), res.end()); return res; } //--------------------------------------------------------------------------------------------------- #define INF 1LL<<60 void _main() { cin >> N; rep(i, 0, N) cin >> A[i] >> B[i]; vector a, b; rep(i, 0, N) { if (i % 2 == 0) a.push_back(i); else b.push_back(i); } auto aa = solve(a); auto bb = solve(b); ll ans = INF; fore(i, aa) { int j = lower_bound(bb.begin(), bb.end(), -i) - bb.begin(); ll mi = INF; if (0 <= j && j < bb.size()) mi = min(mi, abs(i + bb[j])); if (0 <= j - 1 && j - 1 < bb.size()) mi = min(mi, abs(i + bb[j - 1])); if (0 <= j + 1 && j + 1 < bb.size()) mi = min(mi, abs(i + bb[j + 1])); ans = min(ans, mi); } cout << ans << endl; }