#P5251. 「2019-03-10提高模拟赛」最短路(sssp)

「2019-03-10提高模拟赛」最短路(sssp)

Description

推土机,沾沾自喜耳,多易。

在提高模拟赛爆零后,Tweetuzki 开始怀疑自己。

他想起了自己曾经秒切图论题的辉煌。在那个时候,对于什么最短路,生成树,二分图,网络流的模板题…… Tweetuzki 都是随便做的呢。

但是他实在缺乏创新能力。他只知道根据套路做题,对于考思路的题目,就像阿喀琉斯之踵,Tweetuzki 瞬间变得不堪一击。

就拿最短路来说吧。相信大家都知道,对于一张 nn 个点 mm 条边,边有边权的有向图,可以直接通过 Dijkstra 算法得到 11 号点到其他点的最短路长度。

但是现在 Tweetuzki 得到了一个长度为 nn 的数组 aia_i,其中第 ii 个数 aia_i 表示 11 号点到 ii 号点的距离。他被要求构造出一张 mm 条边的有向图,其中要求 mm 不超过 10510^5 且每条边的长度不超过一个给定的值 ss

Tweetuzki 冥思苦想,久久不得解。于是他找到的你 —— F 市著名的程序员。你能帮助 Tweetuzki 解决这个问题吗?

Input Format

从文件 sssp.in 中读入。

输入文件将会遵循以下格式:

NsN \quad s
a1a2ana_1 \quad a_2 \quad \cdots \quad a_n

第一行两个整数 N,sN, s (3N5×104,1s106)(3 \le N \le 5 \times 10^4, 1 \le s \le 10^6),表示点数和限制的边权最大值。
第二行 NN 个非负整数,第 ii 个数为 aia_i (0ai109,a1=0)(0 \le a_i \le 10^9, a_1 = 0),表示点 11 到点 ii 的最短距离。

Output Format

输出到文件 sssp.out 中。

若可以构造这样一张图,第一行输出一个数 MM,表示这张图的边数。
接下来 MM 行,每行三个正整数 u,v,wu, v, w,表示有一条从 uuvv 权值为 ww 的边。

若不能构造这样一张图,只需输出 1-1

输出要求

本题可能有多种答案,我们会使用 Special Judge 来检验你的答案是否正确。

若本数据点无解并且你判断对了,会得到该测试点的满分。

若该测试点有解但你输出了 1-1,将会判作答案错误。

如果你判断对了该测试点有解,则 Special Judge 会根据你的输出运行 Dijkstra 算法,求出 11 号点所有点的最短路。之后将得到的最短路数组与输入文件给出的数组进行比对,只要有一个同位元素不同,或者在你给出的图中有一个点不可达,则会被判作答案错误。若得到的数组一模一样,可以得到该测试点的满分。

为了防止 Special Judge 出现问题,对于输出格式,我们给出以下规定:

  • 若无解,则只需输出一行一个数 1-1

  • 否则,你输出的数必须都是正整数,且:

  • 对于输出数据中的 MM,应当满足 1M1051 \le M \le 10^5

  • 对于输出数据中所有的 ww,应当满足 1ws1 \le w \le s

  • 对于输出数据中所有的 u,vu, v,应当满足 1u,vN1 \le u, v \le N

  • 输出数据第一行必须是一个数 MM,之后必须刚好 MM 行,每行三个正整数 uu, vv, ww

若你的输出不满足输出格式,仍然会被判作答案错误。

Sample

样例输入 1

4 5
0 4 2 9

样例输出 1

4
1 2 4
1 3 2
3 2 5
2 4 5

样例输入 2

4 4
0 4 2 9

样例输出 2

-1

Hint

Subtask #1 (30 points):保证对于任意的 i(i>1)i(i > 1)1ais1 \le a_i \le s
Subtask #2 (20 points):保证不能构造这样的一张图。
Subtask #3 (50 points):无特殊限制。