n과 m의 응용 문제 인듯 하다.
될 수 있는 거 다 뽑고 ( 브루트 포스) ,check 함수로 확인!!
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#include<string>
#include<cstring>
#include<set>
#include<cstdlib>
#include<sstream>
using namespace std;
char temp[100];
int l, c;
char a[100];
bool check() {
int mo = 0;
int ja = 0;
for (int i = 0; i < l; i++) {
if (temp[i] == 'a' || temp[i] == 'e' || temp[i] == 'i' || temp[i] == 'o' || temp[i] == 'u') mo++;
else ja++;
}
if (mo >= 1 && ja >= 2) return true;
else return false;
};
void solve(int cnt , int selected ) {
if (selected == l) {
if (check()) {
for (int i = 0; i < l; i++) {
cout << temp[i];
}cout << '\n';
}
return;
}
if (cnt >= c) return;
temp[selected] = a[cnt];
solve(cnt + 1, selected + 1);
solve(cnt+1, selected);
}
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> l >> c;
for (int i = 0; i < c; i++) {
cin >> a[i];
}
sort(a, a + c);
solve(0,0);
return 0;
}