#CF1510H. 困难优化

困难优化

困难优化

  • 时间限制:5 秒
  • 内存限制:512 MiB

题目描述

给定 nn 个闭线段 [Li,Ri][L_i,R_i]。所有 2n2n 个端点都是两两不同的整数,并且这些线段构成层状集:任意两条线段要么互不相交,要么其中一条严格包含另一条。

请在每条线段 [Li,Ri][L_i,R_i] 中选择一个非空、端点为整数的子线段 [li,ri][l_i,r_i],满足 Li≤li<ri≤RiL_i\le l_i<r_i\le R_i。任意两个所选子线段的内部不能相交,但允许它们拥有相同端点。

最大化

∑i=1n(ri−li).\sum_{i=1}^{n}(r_i-l_i).

你需要同时输出最大值和一组达到最大值的构造。答案可能不唯一,任何最优合法构造均可通过。

输入格式

第一行一个整数 nn。

接下来 nn 行,第 ii 行两个整数 Li,RiL_i,R_i。

输出格式

第一行输出最大长度和。

接下来 nn 行,第 ii 行输出两个整数 li,ril_i,r_i,表示为输入中的第 ii 条线段选择的子线段。

样例输入

4
1 10
2 3
5 9
6 7

样例输出

7
3 6
2 3
7 9
6 7

样例说明

下图分别展示原线段与样例构造。

原线段示意图

所选子线段示意图

数据范围

对于全部数据,1≤n≤20001\le n\le2000,0≤Li<Ri≤1090\le L_i<R_i\le10^9。所有端点两两不同,输入线段构成层状集。

子任务编号 分值 特殊限制
1 20 n≤8n\le8,且最大端点与最小端点之差不超过 1818
2 n≤15n\le15,且最大端点与最小端点之差不超过 6060
3 所有原线段两两不相交
4 40 无特殊限制

每个测试点独立计分。