Олимпиадный тренинг

Задача . D. Продуктивная встреча


На встрече собрались \(n\) человек. В каждый момент времени любые два человека могут отойти и поговорить наедине. Одни и те же два человека могут поговорить несколько (сколько угодно) раз за встречу.

У каждого человека есть ограниченная общительность. Общительность \(i\)-го человека равна неотрицательному целому числу \(a_i\). Это означает, что после \(a_i\) личных разговоров этот человек уходит со встречи (и больше ни с кем не разговаривает). Если \(a_i = 0\), \(i\)-й человек уходит со встречи сразу после ее начала.

Встреча считается тем более продуктивной, чем больше в течение нее состоялось разговоров.

По данному массиву общительности \(a\) определите, какие люди должны разговаривать друг с другом, чтобы суммарное количество разговоров было как можно больше.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В следующих \(2t\) строках даны описания наборов входных данных.

В описании каждого набора данных первая строка содержит целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество людей на встрече, а во второй строке через пробел перечислены \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 2 \cdot 10^5\)) — параметры общительности всех людей.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Также гарантируется, что сумма всех \(a_i\) (по всем наборам входных данных и всем \(i\)) не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) ответов на все наборы входных данных.

В первой строке ответа выведите число \(k\) — максимальное количество разговоров, которое возможно провести за встречу.

В каждой из следующих \(k\) строк выведите через пробел по два целых числа \(i\) и \(j\) (\(1 \le i, j \le n\) и \(i \neq j\)) — номера людей, между которыми состоится очередной разговор.

Если ответов несколько, выведите любой из них.


Примеры
Входные данныеВыходные данные
1 8
2
2 3
3
1 2 3
4
1 2 3 4
3
0 0 2
2
6 2
3
0 0 2
5
8 2 0 1 1
5
0 1 0 0 6
2
1 2
1 2
3
1 3
2 3
2 3
5
1 3
2 4
2 4
3 4
3 4
0
2
1 2
1 2
0
4
1 2
1 5
1 4
1 2
1
5 2

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя