func_code_string: #include <bits/stdc++.h>   using namespace std;   int a[1010], seq[1010], id;   int qtes, u[1000010], v[1000010];   inline void add(int x, int y) {     a[y] -= a[x], a[x] *= 2, u[++qtes] = x, v[qtes] = y;   }   inline void Solve(int x, int y, int z) {     int q[3] = {x, y, z};     register int i, j;     for (i = 0; i < 3; ++i)       for (j = i + 1; j < 3; ++j)         if (a[q[i]] > a[q[j]]) swap(q[i], q[j]);     x = q[0], y = q[1], z = q[2];     if (x == y) {       add(x, y);       return;     }     if (y == z) {       add(y, z);       return;     }     int w = a[y] / a[x];     int tmp = w, up;     for (i = 0; tmp; ++i)       if ((tmp >> i) & 1) up = i, tmp ^= (1 << i);     for (i = 0; i <= up; ++i) {       if ((w >> i) & 1)         add(x, y);       else         add(x, z);     }     if (a[x] == 0 || a[y] == 0 || a[z] == 0)       return;     else       Solve(x, y, z);   }   int main() {     int n;     scanf( %d , &n);     register int i, j;     for (i = 1; i <= n; ++i) scanf( %d , &a[i]);     int last = 0;     for (i = 1; i <= n; ++i)       if (a[i]) ++last;     if (last < 2) {       puts( -1 );       return 0;     } else if (last == 2) {       puts( 0 );       return 0;     }     for (last -= 2; last--;) {       for (id = 0, i = 1; i <= n; ++i)         if (a[i]) seq[++id] = i;       Solve(seq[1], seq[2], seq[3]);     }     printf( %d n , qtes);     for (i = 1; i <= qtes; ++i) printf( %d %d n , u[i], v[i]);     return 0;   }   