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

Задача . C. Парное программирование


Монокарп и Поликарп изучают новые приемы программирования. Сейчас они решили попробовать парное программирование.

Известно, что они проработали вместе \(n + m\) минут, работая над одним файлом. Каждую минуту ровно один из них делал одно изменение в файле. До начала их работы в файле было \(k\) строк.

За одну минуту любой из них может выполнить одно из двух действий: добавить новую строку в конец файла или изменить одну его строку.

Суммарно Монокарп работал \(n\) минут и выполнил последовательность действий \([a_1, a_2, \dots, a_n]\), где \(a_i = 0\), если он добавил новую строку в конец файла или \(a_i > 0\), если он изменил строку с номером \(a_i\). Действия Монокарп производил именно в таком порядке: сначала \(a_1\), затем \(a_2\) и так далее до \(a_n\).

Суммарно Поликарп работал \(m\) минут и выполнил последовательность действий \([b_1, b_2, \dots, b_m]\), где \(b_j = 0\), если он добавил новую строку в конец файла или \(b_j > 0\), если он изменил строку с номером \(b_j\). Действия Поликарп производил именно в таком порядке: сначала \(b_1\), затем \(b_2\) и так далее до \(b_m\).

Восстановите их общую последовательность действий длины \(n + m\), такую, в которой все действия были бы корректными — то есть не должно быть изменений еще не существующих строк. Имейте в виду, что в общей последовательности действия Монокарпа должны образовывать подпоследовательность \([a_1, a_2, \dots, a_n]\), а Поликарпа — подпоследовательность \([b_1, b_2, \dots, b_m]\). Монокарп и Поликарп могут сменять друг друга за компьютером произвольное количество раз.

Рассмотрим пример. Пусть изначально \(k = 3\). Монокарп сначала изменил строку с номером \(2\), а затем добавил новую строку (то есть \(n = 2, \: a = [2, 0]\)). Поликарп же сначала добавил новую строку, а затем изменил строку с номером \(5\) (то есть \(m = 2, \: b = [0, 5]\)).

Так как изначальная длина файла равна \(3\), для того, чтобы Поликарп смог изменить строку с номером \(5\), необходимо сначала добавить две новые строки. Примером правильных последовательностей изменений в таком случае будет \([0, 2, 0, 5]\) или \([2, 0, 0, 5]\). Последовательности изменений \([0, 0, 5, 2]\) (нарушен порядок действий) и \([0, 5, 2, 0]\) (нельзя отредактировать строку \(5\)) не являются корректными.

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

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

Каждый набор входных данных состоит из трех строк. В первой строке задано три целых числа \(k\), \(n\), \(m\) (\(0 \le k \le 100\), \(1 \le n, m \le 100\)) — изначальное количество строк в файле и длины массивов изменений Монокарпа и Поликарпа соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 300\)).

Третья строка содержит \(m\) целых чисел \(b_1, b_2, \dots, b_m\) (\(0 \le b_j \le 300\)).

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

Для каждого набора входных данных выведите через пробел элементы любой корректной объединенной последовательности действий Монокарпа и Поликарпа длины \(n + m\) или -1, если такой последовательности не существует.


Примеры
Входные данныеВыходные данные
1 5

3 2 2
2 0
0 5

4 3 2
2 0 5
0 6

0 2 2
1 0
2 3

5 4 4
6 0 8 0
0 7 0 9

5 4 1
8 7 8 0
0
2 0 0 5 
0 2 0 6 5 
-1
0 6 0 7 0 8 0 9
-1

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

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