#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned int ui; const ll mod = 1000000007; const ll INF = (ll)1000000007 * 1000000007; typedef pair P; #define stop char nyaa;cin>>nyaa; #define rep(i,n) for(int i=0;i=0;i--) #define Rep(i,sta,n) for(int i=sta;i=sta;i--) #define rep1(i,n) for(int i=1;i<=n;i++) #define per1(i,n) for(int i=n;i>=1;i--) #define Rep1(i,sta,n) for(int i=sta;i<=n;i++) typedef long double ld; typedef complex Point; const ld eps = 1e-8; const ld pi = acos(-1.0); typedef pair LP; int n,n1,n2; ll a[35],b[35]; vector Enu(vector v){ vector res={-INF,INF}; int m=v.size(); int M=(1 << m); rep(i,M){ ll s=0; rep(k,m){ if(i & (1 << k)) s+=v[k]; } res.push_back(s); } sort(res.begin(),res.end()); return res; } void solve(){ cin >> n; n1=n/2;n2=n-n1; vector v1,v2; ll S=0; rep(i,n){ cin >> a[i] >> b[i]; if(i d1=Enu(v1),d2=Enu(v2); int k1=(1 << n2); ll ans=INF; Rep(i,1,(1 << n1)+1){ while(d1[i]+d2[k1-1]>=S){ k1--; } //cout << d1[i] << " " << d2[k1] << endl; //cout << d1[i]+d2[k1]-S << endl; ans=min(ans,abs(d1[i]+d2[k1]-S)); } int k2=(1 << n2); Rep(i,1,(1 << n1)+1){ while(d1[i]+d2[k2]>=S){ k2--; } //cout << -d1[i]-d2[k2]+S << endl; ans=min(ans,abs(d1[i]+d2[k1]-S)); } cout << ans << endl; } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout << fixed << setprecision(50); solve(); }