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 Java8 (OpenJDK 1.8.0) (judge verdict: Runtime Error)

import java.util.*;
import java.lang.*;
import java.io.*;

public class Main {
    public static void main(String args[]) throws Exception {
        Fast in = new Fast();
        int n=in.nextInt();
        int arr[]=new int[n+100];
        for (int i = 0; i < n; i++) {
            arr[i]=in.nextInt();
        }
        int count=0;
        int ans[]=new int[(int)1e4];
      for(int j=0;j<n-1;j++) {
          int k=0;
          for (int i = 0; i < n - 1; i++) {
              if (arr[i] >= arr[i + 1]) {
                  int a = (arr[i]);
                  int b = (arr[i + 1]);
                  if (a < 0 && b < 0) {
                      count++;
                      arr[i] = arr[i] + arr[i + 1];
                      //System.out.println((i + 2) + " " + (i + 1));
                      ans[k]=i+2;
                      ans[k+1]=i+1;
                      k=k+2;
                      i--;
                      continue;
                  } else if (a > 0 && b < 0) {
                      count++;
                      arr[i + 1] += arr[i];
                      //System.out.println((i + 1) + " " + (i + 2));
                      ans[k]=i+1;
                      ans[k+1]=i+2;
                      k=k+2;
                      i--;
                      continue;
                  }
                  else if(a>0 && b>0){
                      count++;
                      arr[i+1]+=arr[i];
                      //System.out.println((i + 1) + " " + (i + 2));
                      ans[k]=i+1;
                      ans[k+1]=i+2;
                      k=k+2;
                      i--;
                      continue;
                  }
              }

          }
      }
      System.out.println(count);
      for(int i=0;i<ans.length-1;i++){
          if(ans[i]!=0) {
              System.out.println(ans[i] + " " + ans[i + 1]);
              i++;
          }
      }
    }
}


class Fast {
    BufferedReader br;
    StringTokenizer st;

    public Fast() {
        br = new BufferedReader(new
                InputStreamReader(System.in));
    }

    String next() {
        while (st == null || !st.hasMoreElements()) {
            try {
                st = new StringTokenizer(br.readLine());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return st.nextToken();
    }

    int nextInt() {
        return Integer.parseInt(next());
    }

    long nextLong() {
        return Long.parseLong(next());
    }

    double nextDouble() {
        return Double.parseDouble(next());
    }

    String nextLine() {
        String str = "";
        try {
            str = br.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return str;
    }
}