Задача Триангуляция (TRIANG)

Триангуляцией выпуклого многоугольника называется разбиение многоугольника попарно непересекающимися диагоналями на треугольники. Степенью вершины относительно заданной триангуляции будем считать количество диагоналей, которые исходят из этой вершины.Задан правильный N-угольник. Пронумеруем все вершины в порядке обхода против часовой стрелки натуральными числами от 1 до N. Пусть заданы неотрицательные целые числа d1, d, …, dN. Требуется определить, существует ли хотя бы одна такая триангуляция, что для каждого i вершина i имеет относительно нее степень di, и если существует, то указать любую из них.Выведите диагонали, задающие искомую триангуляцию. Каждая диагональ задается двумя числами ­– номерами вершин, которые соединяет эта диагональ. Каждая диагональ должна выводиться в отдельной строке. Номера вершин разделяются одним пробелом. В случае, если триангуляции с заданными степенями вершин не существует, выведите одно число 0.Технические условия.  Программа TRIANG в первой строке читает с клавиатуры целое число N (3≤N≤200000), во второй строке – N целых чисел d1, d, …, dN (0≤diN). Программа выводит на экран К – количество диагоналей, задающих искомую триангуляцию, а далее – K строк с диагоналями.  Каждая диагональ задается двумя числами ­– номерами вершин, которые соединяет эта диагональ и выводится в отдельной строке. Номера вершин разделяются одним пробелом. В случае, если триангуляции с заданными степенями вершин не существует, выведите одно число  -1.Пример:
Ввод Вывод
61 0 2 1 0 2 3 1 33 64 6
 52 0 2 0 2  -1
 

© LIKT 1998-2018