#include <iostream>
#include <vector>
#include<algorithm>
using namespace std;
struct bo
{
	int xu;
	int shu;
};
bool zhao(bo a,bo b)
{
	return a.shu < b.shu;
}

int main()
{
	int m,s;cin >> m;
	vector<bo>tu(m);
	for (int i = 0;i < m;i++)
	{
		cin >> tu[i].shu;tu[i].xu = i + 1;
	}
	sort(tu.begin(), tu.end(),zhao);
		int num = 0;
		for (int i = 0;i < m;i++)
		{
			num += tu[i].shu;
		}
		if (num % 2 != 0)
		{
			cout << -1;
			return 0;
		}
		int tar = num / 2, a = 0, b = 0,zhui=0,zhao=0;
		while(b<m)
		{
			if (zhui == tar)
			{
				zhao = 1;
				break;
			}
			zhui += tu[b].shu;
			if (zhui == tar)
			{
				zhao = 1;
				break;
			}
			if (zhui < tar)b++;
			while(zhui > tar)
			{
				zhui += -tu[a].shu;
				a++;
			}
		}
		if (zhao)
		{
			vector<int>combo1;
			vector<int>combo2;
			for (int i = a;i <= b;i++)
			{
				for (int j = tu[i].shu;j > 0;j--)
					combo1.push_back(tu[i].xu);
			}
			for (int i = 0;i < a;i++)
			{
				for (int j = tu[i].shu;j > 0;j--)
					combo2.push_back(tu[i].xu);
			}
			for (int i = b+1;i <m;i++)
			{
				for (int j = tu[i].shu;j > 0;j--)
					combo2.push_back(tu[i].xu);
			}
			cout << combo1.size() << endl;
			for (int i = 0;i < combo1.size();i++)
			{
				cout << combo1[i] <<" "<< combo2[i] << endl;
			}
		}
		else cout << -1;
}