#include <bits/stdc++.h>
using namespace std;
const int N = 210, M = 410, INF = 0x3f3f3f3f;
map<int, int> ha;
int s[N], t[N], T[M], tot;
int v[M][M], f[M][N], g[M][N];
int main() {
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i ++ ) {
scanf("%d%d", &s[i], &t[i]);
t[i] += s[i];
T[++ tot] = s[i], T[++ tot] = t[i];
}
sort(T + 1, T + tot + 1);
int m = unique(T + 1, T + tot + 1) - (T + 1);
for (int i = 1; i <= m; i ++ ) ha[T[i]] = i;
for (int i = 1; i <= n; i ++ ) s[i] = ha[s[i]], t[i] = ha[t[i]];
for (int i = 1; i <= m; i ++ )
for (int j = i + 1; j <= m; j ++ )
for (int k = 1; k <= n; k ++ )
if (s[k] >= i && t[k] <= j)
v[i][j] ++ ;
for (int i = 1; i <= m; i ++ )
for (int j = 0; j <= n; j ++ ) {
f[i][j] = -INF;
if (j == 0) f[i][j] = v[1][i];
for (int k = 1; k < i; k ++ ) {
f[i][j] = max(f[i][j], f[k][j] + v[k][i]);
f[i][j] = max(f[i][j], f[k][max(0, j - v[k][i])]);
}
}
for (int i = m; i >= 1; i -- )
for (int j = n; j >= 0; j -- ) {
g[i][j] = -INF;
if (j == 0) g[i][j] = v[i][m];
for (int k = m; k > i; k -- ) {
g[i][j] = max(g[i][j], g[k][j] + v[i][k]);
g[i][j] = max(g[i][j], g[k][max(0, j - v[i][k])]);
}
}
int r = 0;
for (int i = 1; i <= n; i ++ ) r = max(r, min(f[m][i], i));
printf("%d\n", r);
for (int i = 1; i <= n; i ++ ) {
int res = 0;
for (int l = 1; l <= s[i]; l ++ )
for (int r = t[i]; r <= m; r ++ ) {
for (int j = 0; j <= v[1][l]; j ++ ) {
for (int k = 0; k <= v[r][m]; k ++ ) {
res = max(res, min(j + k + v[l][r], f[l][j] + g[r][k]));
if (g[r][k] < k) break;
}
if (f[l][j] < j) break;
}
if (v[1][l] + v[r][m] < res) break;
if (v[l][r] > v[1][l] + v[r][m]) break;
}
printf("%d\n", res);
}
return 0;
}