#include <iostream>
#include <cstring> // Pentru strchr()
using namespace std;
int vowelCount(const char* word) {
int numar = 0;
const char* vocale = "aeiouAEIOU";
for (int i = 0; word[i] != '\0'; ++i) {
if (strchr(vocale, word[i]) != 0) {
numar++;
}
}
return numar;
}
// Funcție pentru a compara două cuvinte lexicografic
int comparaCuvinte(const char* cuvant1, const char* cuvant2) {
int i = 0;
while (cuvant1[i] != '\0' && cuvant2[i] != '\0') {
if (cuvant1[i] < cuvant2[i]) {
return -1;
} else if (cuvant1[i] > cuvant2[i]) {
return 1;
}
i++;
}
if (cuvant1[i] == '\0' && cuvant2[i] == '\0') {
return 0; // Cuvintele sunt egale
} else if (cuvant1[i] == '\0') {
return -1; // cuvant1 este mai scurt
} else {
return 1; // cuvant2 este mai scurt
}
}
// Funcție pentru a sorta cuvintele după numărul de vocale și lexicografic
void sortareCuvinte(char cuvinte[][21], int numereVocale[], int numarCuvinte) {
for (int i = 0; i < numarCuvinte - 1; ++i) {
for (int j = i + 1; j < numarCuvinte; ++j) {
if (numereVocale[i] > numereVocale[j] ||
(numereVocale[i] == numereVocale[j] && comparaCuvinte(cuvinte[i], cuvinte[j]) > 0)) {
// Schimbă cuvintele
char tempCuvant[21];
strcpy(tempCuvant, cuvinte[i]);
strcpy(cuvinte[i], cuvinte[j]);
strcpy(cuvinte[j], tempCuvant);
// Schimbă numerele de vocale
int tempNumarVocale = numereVocale[i];
numereVocale[i] = numereVocale[j];
numereVocale[j] = tempNumarVocale;
}
}
}
}
int main() {
char text[1001];
cin.getline(text, 1001);
char cuvinte[100][21]; // Maxim 100 de cuvinte, fiecare cu maxim 20 de caractere + '\0'
int numereVocale[100];
int numarCuvinte = 0;
char* word = strtok(text, " ");
while (word != nullptr) {
strcpy(cuvinte[numarCuvinte], word);
numereVocale[numarCuvinte] = vowelCount(word);
numarCuvinte++;
word = strtok(nullptr, " ");
}
sortareCuvinte(cuvinte, numereVocale, numarCuvinte);
for (int i = 0; i < numarCuvinte; ++i) {
cout << cuvinte[i] << endl;
}
return 0;
}