#include <iostream>
#include <string>
using namespace std;
const int MAX_SIZE = 2000;
short cntVowelsWord(const string &word) {
short cntVowels = 0;
const string vowels = "AEIOUaeiou";
for (char letter : word) {
if (vowels.find(letter) != string::npos) {
++cntVowels;
}
}
return cntVowels;
}
bool hasValidWord(const string &word) {
return (int)word.size() == 6 && cntVowelsWord(word) <= 3;
}
void splitWords(const string &text, string *validWords, int &noValidWords) {
string currWord;
const int lenText = (int)text.size();
for (int i = 0; i <= lenText; ++i) {
if (isalpha(text[i])) {
currWord += text[i];
} else if (!currWord.empty()) {
if (hasValidWord(currWord)) {
validWords[noValidWords++] += currWord;
}
currWord.clear();
}
}
}
void sortLex(string *validWords, const int &noValidWords) {
for (int i = 0; i < noValidWords - 1; ++i) {
for (int j = i + 1; j < noValidWords; ++j) {
if (validWords[i] > validWords[j]) {
swap(validWords[i], validWords[j]);
}
}
}
}
void printWords(const string *validWords, const int &noValidWords) {
for (int i = 0; i < noValidWords; ++i) {
cout << validWords[i] << '\n';
}
}
int main() {
string validWords[MAX_SIZE], text;
int noValidWords = 0;
while (getline(cin, text)) {
splitWords(text, validWords, noValidWords);
}
sortLex(validWords, noValidWords);
printWords(validWords, noValidWords);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE1BWF9TSVpFID0gMjAwMDsKCnNob3J0IGNudFZvd2Vsc1dvcmQoY29uc3Qgc3RyaW5nICZ3b3JkKSB7CiAgICBzaG9ydCBjbnRWb3dlbHMgPSAwOwogICAgY29uc3Qgc3RyaW5nIHZvd2VscyA9ICJBRUlPVWFlaW91IjsKICAgIGZvciAoY2hhciBsZXR0ZXIgOiB3b3JkKSB7CiAgICAgICAgaWYgKHZvd2Vscy5maW5kKGxldHRlcikgIT0gc3RyaW5nOjpucG9zKSB7CiAgICAgICAgICAgICsrY250Vm93ZWxzOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBjbnRWb3dlbHM7Cn0KCmJvb2wgaGFzVmFsaWRXb3JkKGNvbnN0IHN0cmluZyAmd29yZCkgewogICAgcmV0dXJuIChpbnQpd29yZC5zaXplKCkgPT0gNiAmJiBjbnRWb3dlbHNXb3JkKHdvcmQpIDw9IDM7Cn0KCnZvaWQgc3BsaXRXb3Jkcyhjb25zdCBzdHJpbmcgJnRleHQsIHN0cmluZyAqdmFsaWRXb3JkcywgaW50ICZub1ZhbGlkV29yZHMpIHsKICAgIHN0cmluZyBjdXJyV29yZDsKICAgIGNvbnN0IGludCBsZW5UZXh0ID0gKGludCl0ZXh0LnNpemUoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IGxlblRleHQ7ICsraSkgewogICAgICAgIGlmIChpc2FscGhhKHRleHRbaV0pKSB7CiAgICAgICAgICAgIGN1cnJXb3JkICs9IHRleHRbaV07CiAgICAgICAgfSBlbHNlIGlmICghY3VycldvcmQuZW1wdHkoKSkgewogICAgICAgICAgICBpZiAoaGFzVmFsaWRXb3JkKGN1cnJXb3JkKSkgewogICAgICAgICAgICAgICAgdmFsaWRXb3Jkc1tub1ZhbGlkV29yZHMrK10gKz0gY3VycldvcmQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3VycldvcmQuY2xlYXIoKTsKICAgICAgICB9CiAgICB9Cn0KCnZvaWQgc29ydExleChzdHJpbmcgKnZhbGlkV29yZHMsIGNvbnN0IGludCAmbm9WYWxpZFdvcmRzKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vVmFsaWRXb3JkcyAtIDE7ICsraSkgewogICAgICAgIGZvciAoaW50IGogPSBpICsgMTsgaiA8IG5vVmFsaWRXb3JkczsgKytqKSB7CiAgICAgICAgICAgIGlmICh2YWxpZFdvcmRzW2ldID4gdmFsaWRXb3Jkc1tqXSkgewogICAgICAgICAgICAgICAgc3dhcCh2YWxpZFdvcmRzW2ldLCB2YWxpZFdvcmRzW2pdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKdm9pZCBwcmludFdvcmRzKGNvbnN0IHN0cmluZyAqdmFsaWRXb3JkcywgY29uc3QgaW50ICZub1ZhbGlkV29yZHMpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9WYWxpZFdvcmRzOyArK2kpIHsKICAgICAgICBjb3V0IDw8IHZhbGlkV29yZHNbaV0gPDwgJ1xuJzsKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBzdHJpbmcgdmFsaWRXb3Jkc1tNQVhfU0laRV0sIHRleHQ7CiAgICBpbnQgbm9WYWxpZFdvcmRzID0gMDsKICAgIHdoaWxlIChnZXRsaW5lKGNpbiwgdGV4dCkpIHsKICAgICAgICBzcGxpdFdvcmRzKHRleHQsIHZhbGlkV29yZHMsIG5vVmFsaWRXb3Jkcyk7CiAgICB9CiAgICBzb3J0TGV4KHZhbGlkV29yZHMsIG5vVmFsaWRXb3Jkcyk7CiAgICBwcmludFdvcmRzKHZhbGlkV29yZHMsIG5vVmFsaWRXb3Jkcyk7CiAgICByZXR1cm4gMDsKfQo=