Условие
Даны два массива целых чисел. Создайте третий массив, содержащий сначала все элементы первого массива, затем все элементы второго. Порядок элементов внутри каждого исходного массива должен сохраниться; сортировать их не требуется.
Динамически выделите память для обоих исходных массивов. Реализуйте функцию int *concat_arrays(const int first[], int first_count, const int second[], int second_count), которая выделяет отдельный массив из first_count + second_count элементов, копирует в него данные и возвращает указатель на результат. При ошибке выделения функция возвращает нулевой указатель. Функция не должна изменять или освобождать исходные массивы и не должна выполнять ввод или вывод.
В main прочитайте данные, вызовите функцию, выведите результат и освободите все три массива. Ответственность за освобождение возвращённого массива несёт вызывающий код. При ошибке выделения соблюдайте общее правило блока.
Ограничения
Время: 2 секунды. Память: 64 МиБ. Вывод: до 2 МиБ. Стандарты: C11 / C++17.
Входные данные
В первой строке вводится целое число N — размер первого массива. Во второй строке вводятся N целых чисел через пробел. В третьей строке вводится целое число M — размер второго массива. В четвёртой строке вводятся M целых чисел через пробел. Ограничения: 1 ≤ N, M ≤ 100000, каждый элемент находится в диапазоне от −10⁶ до 10⁶ включительно.
Выходные данные
Выведите N + M целых чисел в одной строке через пробел — элементы объединённого массива.
Примеры
3 1 4 2 2 9 -1
1 4 2 9 -1
1 0 1 0
0 0
2 -3 -3 3 5 0 5
-3 -3 5 0 5