Problem:
Score : 600 points

Problem Statement

Snuke has an integer sequence, a, of length N. The i-th element of a (1-indexed) is a_{i}.

He can perform the following operation any number of times:

Operation: Choose integers x and y between 1 and N (inclusive), and add a_x to a_y.

He would like to perform this operation between 0 and 2N times (inclusive) so that a satisfies the condition below. Show one such sequence of operations.
It can be proved that such a sequence of operations always exists under the constraints in this problem.

Condition: a_1 \leq a_2 \leq ... \leq a_{N}

Constraints

2 \leq N \leq 50

-10^{6} \leq a_i \leq 10^{6}

All input values are integers.

Input

Input is given from Standard Input in the following format:

N
a_1 a_2 ... a_{N}

Output

Let m be the number of operations in your solution. In the first line, print m.
In the i-th of the subsequent m lines, print the numbers x and y chosen in the i-th operation, with a space in between.
The output will be considered correct if m is between 0 and 2N (inclusive) and a satisfies the condition after the m operations.

Sample Input 1

3
-2 5 -1

Sample Output 1

2
2 3
3 3

After the first operation, a = (-2,5,4).

After the second operation, a = (-2,5,8), and the condition is now satisfied.

Sample Input 2

2
-1 -3

Sample Output 2

1
2 1

After the first operation, a = (-4,-3) and the condition is now satisfied.

Sample Input 3

5
0 0 0 0 0

Sample Output 3

0

The condition is satisfied already in the beginning.

Solution in Python (3.8.2) (judge verdict: Accepted)

import bisect, copy

n = int(input())
a = list(map(int, input().split()))
b = copy.copy(a)
ans = []
num = 1
count = 0
while num != n:
    if max(a) < 0:
        break
    while a[num - 1] > a[num]:
        a2 = copy.copy(a)
        a2.sort()
        temp = a[num - 1] - a[num]
        temp2 = bisect.bisect_left(a2, temp)
        if temp2 == n:
            temp2 -= 1
        ans.append([a.index(a2[temp2]) + 1, num + 1])
        a[num] += a2[temp2]
        count += 1
        if count == n * 2 + 1:
            break
    num += 1
    if count == n * 2 + 1:
        break

ans2 = []
num = n - 2
count2 = 0
while num != -1:
    if min(b) > 0:
        break
    while b[num] > b[num + 1]:
        b2 = copy.copy(b)
        b2.sort()
        temp = b[num + 1] - b[num]
        temp2 = bisect.bisect_right(b2, temp)
        if temp2 == 0:
            temp2 += 1
        ans2.append([b.index(b2[temp2 - 1]) + 1, num + 1])
        b[num] += b2[temp2 - 1]
        count2 += 1
        if count2 == n * 2 + 1:
            break
    num -= 1
    if count2 == n * 2 + 1:
        break

if len(ans) == 0 and len(ans2) == 0:
    print(0)
elif len(ans) == 0:
    print(len(ans2))
    for i in ans2:
        print(i[0], i[1])
elif len(ans2) == 0:
    print(len(ans))
    for i in ans:
        print(i[0], i[1])
else:
    if len(ans) > len(ans2):
        print(len(ans2))
        for i in ans2:
            print(i[0], i[1])
    else:
        print(len(ans))
        for i in ans:
            print(i[0], i[1])