#P16178. [Ncpc2020]Hiring and Firing招聘与解雇

[Ncpc2020]Hiring and Firing招聘与解雇

题目描述

Amazin' Inc 是一家快速发展的电商公司。通过先进的预测方法,公司已经知道未来每天需要多少员工。因此每天可以通过解雇和招聘员工,把员工数量调整到当天刚好需要的人数。

为了防止员工过于稳定并组织起来,公司还会定期解雇一些员工并换成新人。例如,如果某一天比前一天多需要 44 名员工,公司也可能先解雇 1010 人,再招聘 1414 人。

但是劳动法规定,解雇员工必须遵循后进先出原则:入职时间最短的人必须最先被解雇。并且,被解雇的人在整个计划期内不能再次被雇佣。

接下来轮到 HR 部门优化自己了。每天会指定一位 HR 员工负责当天的解雇和招聘。为了减少 HR 员工的社交尴尬,公司规定:

解雇某位员工的 HR,必须不同于当初迎接该员工入职的 HR。

HR 员工不像普通员工一样可以临时增减,他们必须是固定的长期员工。请你求出最少需要多少名 HR,才能完成所有计划,并给出每天由哪位 HR 负责。

输入格式

第一行包含一个整数 nn,表示未来计划的天数。

接下来 nn 行,第 ii 行包含两个整数 fi,hif_i,h_i

  • fif_i:第 ii 天解雇的员工数;
  • hih_i:第 ii 天招聘的新员工数。

保证每天要解雇的人数不会超过当前在职人数。

输出格式

第一行输出一个整数 kk,表示最少需要的 HR 人数。

第二行输出 nn 个整数,第 ii 个整数表示第 ii 天负责招聘和解雇的 HR 编号。HR 编号应为 11kk

如果有多种方案,输出任意一种。

数据范围

1n1051 \le n \le 10^5 0fi,hi1060 \le f_i,h_i \le 10^6

并保证

fij=1i1(hjfj)f_i \le \sum_{j=1}^{i-1}(h_j-f_j)

对所有 1in1\le i\le n 成立。

样例 #1

输入

4
0 3
1 1
2 1
2 0

输出

3
1 2 3 2

样例 #2

输入

6
0 10
0 5
2 0
0 0
0 100
50 100

输出

2
1 2 1 2 1 2