Условие
Создайте массив, содержащий числа от 1 до N в порядке возрастания. Сначала расположите в обратном порядке элементы на позициях от A до B включительно, затем — элементы на позициях от C до D включительно. Второй переворот выполняется в массиве, уже изменённом первым переворотом. Участки могут пересекаться. В условии позиции нумеруются с единицы.
Реализуйте функцию void reverse_range(int array[], int left, int right), которая переворачивает участок исходного массива между включительными границами left и right. Параметры функции являются индексами с нуля. В функции main вызовите её дважды: сначала с границами A - 1 и B - 1, затем с границами C - 1 и D - 1.
Функция должна изменять переданный массив, не выполнять ввод или вывод и не создавать второй массив для хранения результата. Для обмена элементов можно использовать функцию swap_values из задачи 2.2.1. Использование готовых функций переворота, включая std::reverse, запрещено.
Ограничения
Время: 2 секунды. Память: 64 МиБ. Вывод: до 2 МиБ. Стандарты: C11 / C++17.
Входные данные
Пять целых чисел N, A, B, C, D в одной строке через пробел. Ограничения: 2 ≤ N ≤ 1000, 1 ≤ A < B ≤ N, 1 ≤ C < D ≤ N.
Выходные данные
Выведите полученный массив из N целых чисел в одной строке через пробел.
Примеры
9 2 5 6 9
1 5 4 3 2 9 8 7 6
9 3 6 5 8
1 2 6 5 8 7 3 4 9
4 1 4 1 4
1 2 3 4