#include using namespace std; const int INF = 1 << 25; int main() { int N; cin >> N; int A[N], B[N]; for (int i = 0; i < N; ++i) { cin >> A[i] >> B[i]; } int ok = 3000, ng = 0; while (ok - ng > 1) { int mid = (ok + ng) / 2; int dp[1 << N]; fill(dp, dp + (1 << N), INF); dp[0] = 0; for (int b = 1; b < (1 << N); ++b) { for (int i = 0; i < N; ++i) { if ((b >> i & 1) == 0) continue; int r = dp[b ^ (1 << i)]; if (b == (1 << i) || r + A[i] <= mid) { dp[b] = min(dp[b], B[i] - A[i]); } } } if (dp[(1 << N) - 1] < INF) { ok = mid; } else { ng = mid; } } cout << ok << endl; return 0; }