#P14943. [uoi2018]Octopus章鱼

[uoi2018]Octopus章鱼

题目描述

不久前,彼得里克从海边度假回到了家。彼得里克非常喜欢动物,因此这次假期中最让他难忘的是海边有许多动物,其中包括他最喜欢的章鱼。

回家后,彼得里克立刻想搭建许多章鱼。为此,他准备用自己的积木玩具。这个积木由一些柔性小棒组成,可以用来连接圆盘。共有 nn 个圆盘,第 ii 个圆盘有 aia_i 个孔,小棒可以插入孔中。小棒不能连接一个圆盘自身,并且任意两个圆盘之间至多由一根小棒连接。

在彼得里克的想象中,章鱼具有如下结构:

  • 章鱼的身体由三个或更多圆盘构成,这些圆盘用小棒连成一个环;
  • 章鱼的触手由若干圆盘通过小棒连接而成;触手可以分叉,但不能重新合并;
  • 每条触手通过一根小棒连接到身体中的某个圆盘。

注意,章鱼可以有多条触手,也可以没有触手。多个触手也可以连接在身体的同一个圆盘上。图中展示了一些章鱼。

任务

请帮助彼得里克搭建章鱼,使得满足以下条件:

  • 所有圆盘都必须被使用;
  • 每个圆盘的每一个孔都必须插入一根小棒;
  • 构造出的章鱼数量尽可能多。注意,这一条只在部分子任务中是强制要求。

输入格式

第一行包含一个整数 nn1n1051 \le n \le 10^5),表示彼得里克积木中的圆盘数量。

第二行包含 nn 个整数 aia_i1ai<n1 \le a_i < n),表示第 ii 个圆盘的孔数。

第三行包含一个整数 maximizemaximize。若 maximize=0maximize=0,表示不需要最大化章鱼数量;若 maximize=1maximize=1,表示需要最大化章鱼数量。

输出格式

第一行输出 Yes,表示可以搭建章鱼;或输出 No,表示不可能搭建。

如果第一行为 Yes,则接下来输出一个整数 cc,表示章鱼的数量。然后输出 nn 行,第 ii 行包含两个整数 numinum_ipip_i

  • numinum_i1numic1 \le num_i \le c)表示圆盘 ii 属于第几只章鱼;
  • pip_i 表示与圆盘 ii 相邻、且更靠近章鱼身体的圆盘编号。

如果圆盘 ii 属于章鱼身体,则认为 pi=1p_i=-1

请结合样例理解输出格式。

输入

9
2 1 2 1 1 1 4 3 3
1

输出

Yes
1
1 -1
1 7
1 -1
1 7
1 8
1 9
1 -1
1 -1
1 -1

子任务

1.(9 分)对所有 iiai{1,3}a_i \in \{1,3\},且不需要最大化章鱼数量; 2.(13 分)对所有 iiai{1,3}a_i \in \{1,3\},且需要最大化章鱼数量; 3.(27 分)不需要最大化章鱼数量; 4.(51 分)需要最大化章鱼数量。