import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class hj118 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int[] degree = new int[n]; int sum = 0; for (int i = 0; i < n; i++) { degree[i] = scanner.nextInt(); sum += degree[i]; } if ((sum & 1) == 1) { System.out.print(-1); return; } int target = sum / 2; boolean[] dp = new boolean[target + 1]; int[] prev = new int[target + 1]; Arrays.fill(prev, -1); dp[0] = true; for (int i = 0; i < n && !dp[target]; i++) { for (int j = target; j >= degree[i] && !dp[target]; j--) { if (dp[j - degree[i]]) { dp[j] = true; prev[j] = i; break; //这个break必须要,防止替换掉之前的 } } } if (!dp[target]) { System.out.print(-1); return; } System.out.println(sum / 2); ArrayList<Integer> vertex1 = new ArrayList<>(); ArrayList<Integer> vertex2 = new ArrayList<>(); for (int i = target; i > 0; i -= degree[prev[i]]) { if (!vertex1.contains(prev[i])) { vertex1.add(prev[i]); } } // for(int i = 0; i < prev.length;i++) // System.out.print(String.valueOf(prev[i])+" "); for (int i = 0; i < n; i++) { if (!vertex1.contains(i)) vertex2.add(i); } System.out.println(vertex1); System.out.println(vertex2); for (int i = 0; i < vertex1.size(); i++) { int v1 = vertex1.get(i); for (int j = 0; j < vertex2.size() && degree[v1] > 0; j++) { int v2 = vertex2.get(j); if (degree[v2] > 0) { System.out.print(Math.min(v1, v2) + 1); System.out.print(" "); System.out.println(Math.max(v1, v2) + 1); degree[v1]--; degree[v2]--; } } } } }