#3553. 圆桌换牌

圆桌换牌

题目描述

nn 名玩家围坐在圆桌旁。他们共有 ss 张卡片,颜色有 nn 种。初始时第一个人手里只有第 1 种颜色的卡片,第二个人只有第 2 种颜色的卡片,依此类推。他们可以按以下规则交换卡片:

  • 交换时,一名玩家只能给出他自己颜色的卡片;
  • 已持有某种颜色卡片的玩家不能再接受这种颜色(尤其地,无论他自己颜色的牌是否已全部送出,他都不能再拿回自己颜色的牌);
  • 一次交换指一对玩家互相交换(每人给出一张、收到一张)。

所有 nn 名玩家的目标是:每人都把自己最初拿到的卡片(即自己颜色的所有卡片)全部送出。请判断这样的交换序列是否存在。若存在,请列出所有交换。

输入格式

第一行包含整数 nn(1≤n≤2000001 \le n \le 200000)和 ss(1≤s≤2000001 \le s \le 200000)。第二行包含 nn 个数,第 ii 个数表示游戏开始时第 ii 名玩家手里有多少张卡片。有可能某个玩家一开始就没有卡片。

输出格式

若这样的交换序列不存在,第一行输出 "No";否则输出 "Yes"。若答案为肯定,接着输出交换次数 kk,然后在 kk 行里用交换双方玩家的编号对来描述每次交换。交换的顺序与编号顺序可以任意。

4 8
2 2 2 2
Yes
4
4 3
4 2
1 3
1 2
6 12
1 1 2 2 3 3
Yes
6
6 5
6 4
6 3
5 4
5 3
2 1
5 5
0 0 0 0 5
No