#include <iostream>
#include <sstream>
#include <map>
#include <vector>
#include <string>
#include <functional>
#include <algorithm>
#include <limits>
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(const string ¶ms)
{
vector<int> data;
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(const string&)>> 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())
{
string params;
getline(cin, params);
it->second(trim(params));
}
else
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << endl;
--num;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxsaW1pdHM+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8aW50PiBpbnNlcnRpb25fc29ydChjb25zdCBzdHJpbmcgJmlucHV0KQp7Cgl2ZWN0b3I8aW50PiBudW1iZXJzOwoJaW50IG51bTsKCWlzdHJpbmdzdHJlYW0gaXNzKGlucHV0KTsKCXdoaWxlIChpc3MgPj4gbnVtKQoJewoJCW51bWJlcnMucHVzaF9iYWNrKG51bSk7CQkJCQoJfQoJc29ydChudW1iZXJzLmJlZ2luKCksIG51bWJlcnMuZW5kKCkpOwoJcmV0dXJuIG51bWJlcnM7Cn0KCnN0cmluZyB0cmltKHN0cmluZyBzdHIpCnsKICAgIHN0ci5lcmFzZSgwLCBzdHIuZmluZF9maXJzdF9ub3Rfb2YoIlx0XG5cdlxmXHIgIikpOwogICAgc3RyLmVyYXNlKHN0ci5maW5kX2xhc3Rfbm90X29mKCJcdFxuXHZcZlxyICIpICsgMSk7CiAgICByZXR1cm4gc3RyOwp9Cgp2b2lkIFNvcnQoY29uc3Qgc3RyaW5nICZwYXJhbXMpCnsKICAgIHZlY3RvcjxpbnQ+IGRhdGE7CgogICAgc3RyaW5nIG51bWJlcnM7CiAgICBnZXRsaW5lKGNpbiwgbnVtYmVycyk7CgogICAgZGF0YSA9IGluc2VydGlvbl9zb3J0KG51bWJlcnMpOwoKICAgIGlmIChwYXJhbXMgPT0gIkRFU0NFTkRJTkciKQogICAgewogICAgICAgIC8vIERFU0NFTkRJTkcKICAgICAgICBmb3IgKGF1dG8gaXQgPSBkYXRhLnJiZWdpbigpOyBpdCAhPSBkYXRhLnJlbmQoKTsgKytpdCkKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQgPDwgKml0IDw8ICIgIjsKICAgICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgLy8gQVNDRU5ESU5HCiAgICAgICAgZm9yIChhdXRvIGl0ID0gZGF0YS5iZWdpbigpOyBpdCAhPSBkYXRhLmVuZCgpOyArK2l0KQogICAgICAgIHsKICAgICAgICAgICAgY291dCA8PCAqaXQgPDwgIiAiOwogICAgICAgIH0KICAgIH0KfQoKaW50IG1haW4oKQp7CiAgICBtYXA8c3RyaW5nLCBmdW5jdGlvbjx2b2lkKGNvbnN0IHN0cmluZyYpPj4gZnVuY3Rpb25zOwogICAgZnVuY3Rpb25zWyJTT1JUIl0gPSBTb3J0OwogICAgLyoKICAgIGZ1bmN0aW9uc1siSVNfU09SVEVEIl0gPSBJc19Tb3J0ZWQ7CiAgICBmdW5jdGlvbnNbIkdFVE1BWCJdID0gR2V0TWF4OwogICAgZnVuY3Rpb25zWyJBUFBFTkQiXSA9IEFwcGVuZFNvcnRlZDsKICAgIGZ1bmN0aW9uc1siR0VUX0hJU1RPR1JBTSJdID0gR2V0SGlzdG9ncmFtOwoJKi8KCiAgICBpbnQgbnVtOwogICAgY2luID4+IG51bTsKCiAgICB3aGlsZSAobnVtID4gMCkKICAgIHsKICAgICAgICBzdHJpbmcgZnVuYzsKICAgICAgICBjaW4gPj4gZnVuYzsKCiAgICAgICAgYXV0byBpdCA9IGZ1bmN0aW9ucy5maW5kKGZ1bmMpOwogICAgICAgIGlmIChpdCAhPSBmdW5jdGlvbnMuZW5kKCkpCiAgICAgICAgewoJCQlzdHJpbmcgcGFyYW1zOwoJCQlnZXRsaW5lKGNpbiwgcGFyYW1zKTsKICAgICAgICAgICAgaXQtPnNlY29uZCh0cmltKHBhcmFtcykpOwogICAgICAgIH0KICAgICAgICBlbHNlCgkgICAgCWNpbi5pZ25vcmUobnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1heCgpLCAnXG4nKTsKCiAgICAgICAgY291dCA8PCBlbmRsOwoKICAgICAgICAtLW51bTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=