Условие
В пространстве имён control реализуйте две перегрузки функции clamp_value: одну с тремя аргументами и результатом типа int, другую — типа double. Функция возвращает нижнюю границу, если значение меньше неё, верхнюю — если оно больше неё, иначе само значение. Границы включительны и заданы в правильном порядке.
Обработайте запросы INT value lower upper и DOUBLE value lower upper, выбирая нужную перегрузку по типу прочитанных переменных. В main вызывайте функции через полное имя control::clamp_value. Готовые функции ограничения значений не допускаются.
Ограничения
Время: 2 секунды. Память: 64 МиБ. Вывод: до 2 МиБ. Язык: C++17.
Входные данные
В первой строке вводится Q. Следующие Q строк содержат запросы. Ограничения: 1 ≤ Q ≤ 1000, все числовые аргументы находятся в диапазоне от −10000 до 10000, lower ≤ upper. Для INT аргументы целые; для DOUBLE — вещественные с не более чем двумя знаками после десятичной точки.
Выходные данные
Для каждого запроса выведите ограниченное значение с новой строки. Для INT — целое число, для DOUBLE — число с шестью знаками после десятичной точки.
Примеры
3 INT -1 0 10 DOUBLE 12.5 0 10 INT 5 0 10
0 10.000000 5
2 DOUBLE -2 -2 -2 INT 100 7 7
-2.000000 7
2 INT -10 -20 -5 DOUBLE 1.25 0.5 2.5
-10 1.250000