#include <iostream>
#include <iomanip>
#include <map>
#include <set>
#include <cmath>
#include <vector>
#include <climits>
#include <string>
#include <algorithm>
#include <sstream>
using namespace std;
vector<string> split(string haystack, string needle) {
vector<string> result;
int startPos = 0;
int foundPos = haystack.find(needle, startPos);
while (foundPos != string::npos) {
int count = foundPos - startPos;
string token = haystack.substr(startPos, count);
if (!token.empty()) {
result.push_back(token);
}
startPos = foundPos + needle.length();
foundPos = haystack.find(needle, startPos);
}
string token = haystack.substr(startPos, haystack.length() - startPos);
if (!token.empty()) {
result.push_back(token);
}
return result;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
string s;getline(cin, s);
vector<string> parts = split(s, " ");
sort(parts.begin(), parts.end());
for (auto value : parts) {
cout << value << " ";
}
cout << endl;
sort(parts.begin(), parts.end(), [](const string& a, const string& b) {
if (a.length() != b.length()) {
return a.length() < b.length();
}
return a < b;
});
for (auto value : parts) {
cout << value << " ";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y2xpbWl0cz4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHNzdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8c3RyaW5nPiBzcGxpdChzdHJpbmcgaGF5c3RhY2ssIHN0cmluZyBuZWVkbGUpIHsKICAgIHZlY3RvcjxzdHJpbmc+IHJlc3VsdDsKICAgIGludCBzdGFydFBvcyA9IDA7CiAgICBpbnQgZm91bmRQb3MgPSBoYXlzdGFjay5maW5kKG5lZWRsZSwgc3RhcnRQb3MpOwogICAgd2hpbGUgKGZvdW5kUG9zICE9IHN0cmluZzo6bnBvcykgewogICAgICAgIGludCBjb3VudCA9IGZvdW5kUG9zIC0gc3RhcnRQb3M7CiAgICAgICAgc3RyaW5nIHRva2VuID0gaGF5c3RhY2suc3Vic3RyKHN0YXJ0UG9zLCBjb3VudCk7CiAgICAgICAgaWYgKCF0b2tlbi5lbXB0eSgpKSB7CiAgICAgICAgICAgIHJlc3VsdC5wdXNoX2JhY2sodG9rZW4pOwogICAgICAgIH0KICAgICAgICBzdGFydFBvcyA9IGZvdW5kUG9zICsgbmVlZGxlLmxlbmd0aCgpOwogICAgICAgIGZvdW5kUG9zID0gaGF5c3RhY2suZmluZChuZWVkbGUsIHN0YXJ0UG9zKTsKICAgIH0KICAgIHN0cmluZyB0b2tlbiA9IGhheXN0YWNrLnN1YnN0cihzdGFydFBvcywgaGF5c3RhY2subGVuZ3RoKCkgLSBzdGFydFBvcyk7CiAgICBpZiAoIXRva2VuLmVtcHR5KCkpIHsKICAgICAgICByZXN1bHQucHVzaF9iYWNrKHRva2VuKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7Cn0KCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwogICAgc3RyaW5nIHM7Z2V0bGluZShjaW4sIHMpOwogICAgCiAgICB2ZWN0b3I8c3RyaW5nPiBwYXJ0cyA9IHNwbGl0KHMsICIgIik7CiAgICAKICAgIHNvcnQocGFydHMuYmVnaW4oKSwgcGFydHMuZW5kKCkpOwoKICAgIGZvciAoYXV0byB2YWx1ZSA6IHBhcnRzKSB7CiAgICAgICAgY291dCA8PCB2YWx1ZSA8PCAiICI7CiAgICB9CgogICAgY291dCA8PCBlbmRsOwoKICAgIHNvcnQocGFydHMuYmVnaW4oKSwgcGFydHMuZW5kKCksIFtdKGNvbnN0IHN0cmluZyYgYSwgY29uc3Qgc3RyaW5nJiBiKSB7CiAgICAgICAgaWYgKGEubGVuZ3RoKCkgIT0gYi5sZW5ndGgoKSkgewogICAgICAgICAgICByZXR1cm4gYS5sZW5ndGgoKSA8IGIubGVuZ3RoKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhIDwgYjsKICAgIH0pOwoKICAgIGZvciAoYXV0byB2YWx1ZSA6IHBhcnRzKSB7CiAgICAgICAgY291dCA8PCB2YWx1ZSA8PCAiICI7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=