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 C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

/*
Come feed the rain
'cause I'm thirsty for your love dancing underneath the skies of lust
Yeah, feed the rain
'cause without your love my life ain't nothing but this carnival of rust!
*/

#include <bits/stdc++.h>

using namespace std;

#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define LOG1(a)			  cerr<< #a << " = " << (a) << "\n"
#define LOG2(a, b)		  cerr<< #a << " = " << (a) << ", " << #b << " = " << (b) << "\n"
#define LOG3(a, b, c)     cerr<< #a << " = " << (a) << ", " << #b << " = " << (b) << ", "<< #c << " = " << (c) << "\n"
#define LOG4(a, b, c, d)  cerr<< #a << " = " << (a) << ", " << #b << " = " << (b) << ", "<< #c << " = " << (c) << ", " << #d << " = " << (d) << "\n"
#define endl "\n"

typedef long long int ll;
typedef pair<int, int> pii;
typedef vector<pii> vii;
typedef vector<int> vi;
typedef vector<long long int> vll;

const double EPS = 1e-9;
const double pi = acos(-1);
const ll INF = 1e18;
const int inf = 1e9;
const int MOD = 1e9 + 7;
const int nax = 1000000 + 10;

int n, arr[nax];
vii v;

void solve(int l, int r)
{
    //cout << l << " " << r << endl;
    if(l >= r) return;
    int maxi = 0;
    int maxidx = -1;
    for(int i = l; i <= r; i++)
    {
        int cur = abs(arr[i]);
        if(cur >= maxi)
        {
            maxi = cur;
            maxidx = i;
        }
    }
    if(arr[maxidx] < 0)
    {
        for(int i = maxidx - 1; i >= l; i--)
        {
            while(arr[i] > arr[i + 1])
            {
                v.pb({i + 1, i});
                arr[i] += arr[i + 1];
            }
        }
        solve(maxidx + 1, r);
        return;
    }
    else
    {
        for(int i = maxidx + 1; i <= r; i++)
        {
            while(arr[i] < arr[i - 1])
            {
                v.pb({i - 1, i});
                arr[i] += arr[i - 1];
            }
        }
        solve(l, maxidx - 1);
        return ;
    }
}
int main()
{
    ios::sync_with_stdio(0);
    cin >> n;
    for(int i = 1; i <= n; i++) cin >> arr[i];
    solve(1, n);
    cout << v.size() << endl;
    for(auto x: v) cout << x.ff << " " << x.ss << endl;
    return 0;
}