#include <iostream>
#include <sstream>
#include <map>
#include <vector>
#include <string>
#include <functional>
#include <algorithm>
using namespace std;
vector<int> insertion_sort(const string &input)
{
vector<int> numbers;
int num;
istringstream iss(input);
while (iss >> num)
{
numbers.push_back(num);
}
sort(numbers.begin(), numbers.end());
return numbers;
}
string trim(string str)
{
str.erase(0, str.find_first_not_of("\t\n\v\f\r "));
str.erase(str.find_last_not_of("\t\n\v\f\r ") + 1);
return str;
}
void Sort()
{
vector<int> data;
string params;
getline(cin, params);
params = trim(params);
string numbers;
getline(cin, numbers);
data = insertion_sort(numbers);
if (params == "DESCENDING")
{
// DESCENDING
for (auto it = data.rbegin(); it != data.rend(); ++it)
{
cout << *it << " ";
}
}
else
{
// ASCENDING
for (auto it = data.begin(); it != data.end(); ++it)
{
cout << *it << " ";
}
}
}
int main()
{
map<string, function<void()>> functions;
functions["SORT"] = Sort;
/*
functions["IS_SORTED"] = Is_Sorted;
functions["GETMAX"] = GetMax;
functions["APPEND"] = AppendSorted;
functions["GET_HISTOGRAM"] = GetHistogram;
*/
int num;
cin >> num;
while (num > 0)
{
string func;
cin >> func;
auto it = functions.find(func);
if (it != functions.end())
{
it->second();
}
cout << endl;
--num;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8aW50PiBpbnNlcnRpb25fc29ydChjb25zdCBzdHJpbmcgJmlucHV0KQp7Cgl2ZWN0b3I8aW50PiBudW1iZXJzOwoJaW50IG51bTsKCWlzdHJpbmdzdHJlYW0gaXNzKGlucHV0KTsKCXdoaWxlIChpc3MgPj4gbnVtKQoJewoJCW51bWJlcnMucHVzaF9iYWNrKG51bSk7CQkJCQoJfQoJc29ydChudW1iZXJzLmJlZ2luKCksIG51bWJlcnMuZW5kKCkpOwoJcmV0dXJuIG51bWJlcnM7Cn0KCnN0cmluZyB0cmltKHN0cmluZyBzdHIpCnsKICAgIHN0ci5lcmFzZSgwLCBzdHIuZmluZF9maXJzdF9ub3Rfb2YoIlx0XG5cdlxmXHIgIikpOwogICAgc3RyLmVyYXNlKHN0ci5maW5kX2xhc3Rfbm90X29mKCJcdFxuXHZcZlxyICIpICsgMSk7CiAgICByZXR1cm4gc3RyOwp9Cgp2b2lkIFNvcnQoKQp7CiAgICB2ZWN0b3I8aW50PiBkYXRhOwoKICAgIHN0cmluZyBwYXJhbXM7CiAgICBnZXRsaW5lKGNpbiwgcGFyYW1zKTsKICAgIHBhcmFtcyA9IHRyaW0ocGFyYW1zKTsKCiAgICBzdHJpbmcgbnVtYmVyczsKICAgIGdldGxpbmUoY2luLCBudW1iZXJzKTsKCiAgICBkYXRhID0gaW5zZXJ0aW9uX3NvcnQobnVtYmVycyk7CgogICAgaWYgKHBhcmFtcyA9PSAiREVTQ0VORElORyIpCiAgICB7CiAgICAgICAgLy8gREVTQ0VORElORwogICAgICAgIGZvciAoYXV0byBpdCA9IGRhdGEucmJlZ2luKCk7IGl0ICE9IGRhdGEucmVuZCgpOyArK2l0KQogICAgICAgIHsKICAgICAgICAgICAgY291dCA8PCAqaXQgPDwgIiAiOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICAvLyBBU0NFTkRJTkcKICAgICAgICBmb3IgKGF1dG8gaXQgPSBkYXRhLmJlZ2luKCk7IGl0ICE9IGRhdGEuZW5kKCk7ICsraXQpCiAgICAgICAgewogICAgICAgICAgICBjb3V0IDw8ICppdCA8PCAiICI7CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpCnsKICAgIG1hcDxzdHJpbmcsIGZ1bmN0aW9uPHZvaWQoKT4+IGZ1bmN0aW9uczsKICAgIGZ1bmN0aW9uc1siU09SVCJdID0gU29ydDsKICAgIC8qCiAgICBmdW5jdGlvbnNbIklTX1NPUlRFRCJdID0gSXNfU29ydGVkOwogICAgZnVuY3Rpb25zWyJHRVRNQVgiXSA9IEdldE1heDsKICAgIGZ1bmN0aW9uc1siQVBQRU5EIl0gPSBBcHBlbmRTb3J0ZWQ7CiAgICBmdW5jdGlvbnNbIkdFVF9ISVNUT0dSQU0iXSA9IEdldEhpc3RvZ3JhbTsKCSovCgogICAgaW50IG51bTsKICAgIGNpbiA+PiBudW07CgogICAgd2hpbGUgKG51bSA+IDApCiAgICB7CiAgICAgICAgc3RyaW5nIGZ1bmM7CiAgICAgICAgY2luID4+IGZ1bmM7CgogICAgICAgIGF1dG8gaXQgPSBmdW5jdGlvbnMuZmluZChmdW5jKTsKICAgICAgICBpZiAoaXQgIT0gZnVuY3Rpb25zLmVuZCgpKQogICAgICAgIHsKICAgICAgICAgICAgaXQtPnNlY29uZCgpOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IGVuZGw7CgogICAgICAgIC0tbnVtOwogICAgfQoKICAgIHJldHVybiAwOwp9Cg==