2018 团体程序设计天梯赛分组赛暨 3 月内部选拔

B3. 小朋友分糖果

单点时限: 1.0 sec

内存限制: 256 MB

n 个小朋友,标号为 1n,每个小朋友有一些糖果,第 i 个小朋友拥有糖果数量为 ai

为了使得每个小朋友拥有相同的糖果,现提供如下操作:选择两个小朋友组成一个有序对 (u,v) (1u,vn,uv),然后记两个小朋友拥有的糖果总和为 S,然后令 au=S2, av=S2

即:

function do_something(u, v):
    S := (a[u] + a[v])
    a[u] := floor(S / 2)
    a[v] := ceil(S / 2)

请构造一系列操作,使得所有小朋友最终拥有相同的糖果。

输入格式

第一行一个整数 n (1n1 000)。

第二行 n 个整数用空格隔开:a1,a2,,an (0ai109)。

输出格式

题目保证有解。输出:

  • 第一行:输出一个整数 m (0m10 000),表示操作序列的长度。
  • 接下来依次输出操作,每一行输出两个整数 u,vu,v 的含义见题意。

所以你的程序应该在 10 000 步以内完成任务。给定数据保证存在一种方案能够完成目标。你可以输出任意一种方案。

样例

Input
4
1 3 1 3
Output
2
1 4
2 3