#!/usr/bin/env python3
import random
import time
MAX_TIME = 1.8

random.seed(2020)
start_time = time.time()

n = int(input())
E = [[] for _ in range(n)]
cur = []
for i in range(n):
    (f, h) = map(int, input().split())
    while f:
        if not cur[-1][0]:
            cur.pop()
            continue
        E[i].append(cur[-1][1])
        E[cur[-1][1]].append(i)
        x = min(f, cur[-1][0])
        cur[-1][0] -= x
        f -= x
    cur.append([h, i])

best = [n+1]*n
V = list(range(n))
for it in range(100000):
    if it == 0: pass
    elif it == 1: V.reverse()
    elif it == 2: V.sort(key=lambda x: -len(E[x]))
    else: random.shuffle(V)
    col = [0]*n
    for v in V:
        forbidden = set([col[j] for j in E[v] if col[j]])
        col[v] = 1
        while col[v] in forbidden: col[v] += 1
    if max(col) < max(best):
        best = col
    if time.time() - start_time > MAX_TIME: break
print(max(best))
print(' '.join(map(str, best)))

