#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef vector vi; typedef vector vvi; #define rep(i,n) for(ll i=0;i<(n);i++) #define tii tuple #define tiii tuple #define mt make_tuple #define pb push_back #define ALL(a) (a).begin(),(a).end() #define FST first #define SEC second const int INF = (INT_MAX/2); const ll LLINF = (LLONG_MAX/2); const double eps = 1e-5; const double PI = M_PI; #define DEB cerr<<"!"<0){if((n&1)==1)r=r*x%m;x=x*x%m;n>>=1;}return r%m;} int main(){ int n; cin >> n; map m; m[0] = 1; rep(i,16){ if(i == n) break; ll a,b; cin >> a >> b; map tm; for(auto itr:m){ tm[itr.FST+a] = 1; tm[itr.FST-b] = 1; } m = tm; } map m2; m2[0] = 1; for(int i = 16; i < n;i++){ ll a,b; cin >> a >> b; map tm; for(auto itr:m2){ tm[itr.FST+a] = 1; tm[itr.FST-b] = 1; } m2 = tm; } ll ans = LLINF; //SHOW(m.size(),m2.size()); for(auto itr1:m){ ans = min(ans,abs(itr1.FST+(*m2.lower_bound(-itr1.FST)).FST)); if(((m2.lower_bound(-itr1.FST))) != (--m2.end())) ans = min(ans,abs(itr1.FST+(*(++(m2.lower_bound(-itr1.FST)))).FST)); if(((m2.lower_bound(-itr1.FST))) != (m2.begin())) ans = min(ans,abs(itr1.FST+(*(--(m2.lower_bound(-itr1.FST)))).FST)); } cout << ans << endl; return 0; }