#include <bits/stdc++.h>
#define ll long long
#define all(x) x.begin(), x.end()
#define f1(i, n) for(int i=1;i<=n;++i)
using namespace std;
const int maxn = 2e6 + 1;
int n, x['Z'], cnt['Z'], ch[100];
int n_old;
vector<string> result;
string rev(string s) {
string res = "";
for (int i = s.size() - 1; i >= 0; --i) {
res += s[i];
}
return res;
}
bool check(string s) {
for (int i = 0; i < s.size(); ++i) {
if (cnt[s[i]] > x[s[i]]) {
return false;
}
}
return true;
}
void ql(int i) {
if (i > n) {
string first_half = "";
for (int i = 1; i <= n; ++i) {
first_half += ch[i];
cnt[ch[i]] += 2;
}
string last_half = rev(first_half);
if (n_old % 2 == 1) { // chữ ở giữa nếu n lẻ
for (char c = 'A'; c <= 'D'; ++c) {
if (cnt[c] > x[c]) {
return;
}
if (cnt[c] + 1 > x[c]) {
continue;
}
else {
result.push_back(first_half + c + last_half);
}
}
// nửa sau
}
else {
for (char c = 'A'; c <= 'D'; ++c) {
if (cnt[c] > x[c]) {
return;
}
else {
result.push_back(first_half + last_half);
}
}
}
return;
}
ch[i] = 'A';
ql(i + 1);
ch[i] = 'B';
ql(i + 1);
ch[i] = 'C';
ql(i + 1);
ch[i] = 'D';
ql(i + 1);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> x['A'] >> x['B'] >> x['C'] >> x['D'];
n_old = n;
n /= 2;
ql(1);
for(auto x : result){
cout<<x<<endl;
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSwgeC5lbmQoKQojZGVmaW5lIGYxKGksIG4pIGZvcihpbnQgaT0xO2k8PW47KytpKQp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IG1heG4gPSAyZTYgKyAxOwoKaW50IG4sIHhbJ1onXSwgY250WydaJ10sIGNoWzEwMF07CmludCBuX29sZDsKdmVjdG9yPHN0cmluZz4gcmVzdWx0OwoKc3RyaW5nIHJldihzdHJpbmcgcykgewoJc3RyaW5nIHJlcyA9ICIiOwoJZm9yIChpbnQgaSA9IHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKCQlyZXMgKz0gc1tpXTsKCX0KCXJldHVybiByZXM7Cn0KCmJvb2wgY2hlY2soc3RyaW5nIHMpIHsKCWZvciAoaW50IGkgPSAwOyBpIDwgcy5zaXplKCk7ICsraSkgewoJCWlmIChjbnRbc1tpXV0gPiB4W3NbaV1dKSB7CgkJCXJldHVybiBmYWxzZTsKCQl9Cgl9CglyZXR1cm4gdHJ1ZTsKfQoKdm9pZCBxbChpbnQgaSkgewoJaWYgKGkgPiBuKSB7CgkJc3RyaW5nIGZpcnN0X2hhbGYgPSAiIjsKCQlmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpIHsKCQkJZmlyc3RfaGFsZiArPSBjaFtpXTsKCQkJY250W2NoW2ldXSArPSAyOwoJCX0KCgkJc3RyaW5nIGxhc3RfaGFsZiA9IHJldihmaXJzdF9oYWxmKTsKCQlpZiAobl9vbGQgJSAyID09IDEpIHsgLy8gY2jhu68g4bufIGdp4buvYSBu4bq/dSBuIGzhursKCQkJZm9yIChjaGFyIGMgPSAnQSc7IGMgPD0gJ0QnOyArK2MpIHsKCQkJCWlmIChjbnRbY10gPiB4W2NdKSB7CgkJCQkJcmV0dXJuOwoJCQkJfQoJCQkJaWYgKGNudFtjXSArIDEgPiB4W2NdKSB7CgkJCQkJY29udGludWU7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlyZXN1bHQucHVzaF9iYWNrKGZpcnN0X2hhbGYgKyBjICsgbGFzdF9oYWxmKTsKCQkJCX0KCQkJfQoJCQkvLyBu4butYSBzYXUKCQl9CgkJZWxzZSB7CgkJCWZvciAoY2hhciBjID0gJ0EnOyBjIDw9ICdEJzsgKytjKSB7CgkJCQlpZiAoY250W2NdID4geFtjXSkgewoJCQkJCXJldHVybjsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCXJlc3VsdC5wdXNoX2JhY2soZmlyc3RfaGFsZiArIGxhc3RfaGFsZik7CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuOwoJfQoKCWNoW2ldID0gJ0EnOwoJcWwoaSArIDEpOwoKCWNoW2ldID0gJ0InOwoJcWwoaSArIDEpOwoKCWNoW2ldID0gJ0MnOwoJcWwoaSArIDEpOwoKCWNoW2ldID0gJ0QnOwoJcWwoaSArIDEpOwoKfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CgljaW4udGllKG51bGxwdHIpOwoKCWNpbiA+PiBuID4+IHhbJ0EnXSA+PiB4WydCJ10gPj4geFsnQyddID4+IHhbJ0QnXTsKCgluX29sZCA9IG47CgoJbiAvPSAyOwoKCXFsKDEpOwoKCWZvcihhdXRvIHggOiByZXN1bHQpewoJCWNvdXQ8PHg8PGVuZGw7Cgl9CgoKCgp9Cg==