output_description: 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.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N
      a_1 a_2 ... a_{N}
attempt: import java.io.*;
  import java.util.*;
  
  
  class Main {
      static int p=0;
      static int[]ops;
      static long[]a;
      static int n;
      static void add(int x,int y){
          a[y]+=a[x];
          ops[p++]=x*n+y;
      }
      public static void main(String[] args) {
          MyScanner sc = new MyScanner();
          out = new PrintWriter(new BufferedOutputStream(System.out));
          n=sc.nextInt();
          a=new long[n];
          ops=new int[2*n];
          for(int i=0;i<n;++i)a[i]=sc.nextLong();
          long max=Math.abs(a[0]);
          int maxind=0;
          for(int i=1;i<n;++i){
              if(max<Math.abs(a[i])){
                  max=Math.abs(a[i]);
                  maxind=i;
              }
          }
          if(max!=0){
              for(int i=0;i<n;++i)
                  if(i!=maxind)
                      add(maxind,i);
              if(a[maxind]<0)
                  for(int i=n-2;i>=0;--i)
                      add(i+1,i);
              else
                  for(int i=0;i<n-1;++i)
                      add(i,i+1);
          }
          out.println(p);
          for(int i=0;i<p;++i){
              int x=ops[i]/n+1;
              int y=ops[i]%n+1;
              out.println(x+" "+y);
          }
          out.close();
      }
      // http://codeforces.com/blog/entry/7018
      //-----------PrintWriter for faster output---------------------------------
      public static PrintWriter out;
      //-----------MyScanner class for faster input----------
      public static class MyScanner {
          BufferedReader br;
          StringTokenizer st;
          public MyScanner() {
              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;
          }
      }
  }
  
problem_description: 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}
samples: [{"input": "3\n    -2 5 -1", "output": "2\n    2 3\n    3 3\n    \n\n  * After the first operation, a = (-2,5,4).\n  * After the second operation, a = (-2,5,8), and the condition is now satisfied.\n\n* * *"}, {"input": "2\n    -1 -3", "output": "1\n    2 1\n    \n\n  * After the first operation, a = (-4,-3) and the condition is now satisfied.\n\n* * *"}, {"input": "5\n    0 0 0 0 0", "output": "0\n    \n\n  * The condition is satisfied already in the beginning."}]