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 (Python):
import math,string,itertools,fractions,heapq,collections,re,array,bisect,sys,random,time,copy,functools

sys.setrecursionlimit(10**7)
inf = 10**20
eps = 1.0 / 10**15
mod = 10**9+7

def LI(): return [int(x) for x in sys.stdin.readline().split()]
def LI_(): return [int(x)-1 for x in sys.stdin.readline().split()]
def LF(): return [float(x) for x in sys.stdin.readline().split()]
def LS(): return sys.stdin.readline().split()
def I(): return int(sys.stdin.readline())
def F(): return float(sys.stdin.readline())
def S(): return input()
def pf(s): return print(s, flush=True)


def main():
    n = I()
    a = LI()
    ma = max(a)
    mi = min(a)
    r = []
    if abs(mi) > ma:
        i = a.index(mi)
        for j in range(n):
            if j == i:
                continue
            r.append('{} {}'.format(i+1, j+1))
        for j in range(n-1,0,-1):
            r.append('{} {}'.format(j+1, j))
    else:
        i = a.index(ma)
        for j in range(n):
            if j == i:
                continue
            r.append('{} {}'.format(i+1, j+1))
        for j in range(n-1):
            r.append('{} {}'.format(j+1, j+2))

    return '\n'.join([str(len(r))]+r)



print(main())

Solution (Python):
n = input()
a = map(int, raw_input().split())


z = []
if max(a) > -min(a):
	r = a.index(max(a))
	for i in range(n):
		if i != r:
			a[i] += a[r]
			z.append((r, i))
	for i in range(n - 1):
		z.append((i, i + 1))
else:
	r = a.index(min(a))
	for i in range(n):
		if i != r:
			a[i] += a[r]
			z.append((r, i))
	for i in range(n - 1)[::-1]:
		z.append((i + 1, i))

print len(z)
for x, y in z:
	print x + 1, y + 1