#include<iostream>
using namespace std;
#include<set>
#include<map>
string str = "";
string vasya_and_multisets(multiset<int> total){
map<int, int> count;
for(auto x: total)
count[x]++;
multiset<int> A, B;
int cnt = 0;
int prev = -1;
for(auto x: total){
if(count[x] % 2 != 0 && x != prev){
cnt++;
}
prev = x;
}
//cout<<"\n\ncnt = "<<cnt;
if(cnt % 2 != 0)
return "NO";
for(auto x: total){
if(count[x] % 2 != 0 && count[x] != 1){
B.insert(x);
count[x]--;
str += 'B';
}
else if(count[x] % 2 != 0 && count[x] == 1){
B.insert(x);
str += 'B';
}
else{
A.insert(x);
str += 'A';
}
}
int i = 1;
int it = 0;
for(auto x: B){
if(i > cnt/ 2)
break;
if(count[x] == 1){
A.insert(x);
B.erase(x);
i++;
str[it] = 'A';
}
it++;
}
return "YES";
}
int main(){
int n;
cin>>n;
multiset<int> total;
int x;
for(int i=0; i<n; i++){
cin>>x;
total.insert(x);
}
string ans = vasya_and_multisets(total);
if(ans == "NO")
cout<<"NO\n";
else {
cout<<"YES\n"<<str<<"\n";
}
return 0;
}
CiNpbmNsdWRlPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojaW5jbHVkZTxzZXQ+CiNpbmNsdWRlPG1hcD4KCnN0cmluZyBzdHIgPSAiIjsKCnN0cmluZyB2YXN5YV9hbmRfbXVsdGlzZXRzKG11bHRpc2V0PGludD4gdG90YWwpewoJbWFwPGludCwgaW50PiBjb3VudDsKCglmb3IoYXV0byB4OiB0b3RhbCkKCQljb3VudFt4XSsrOwoKCW11bHRpc2V0PGludD4gQSwgQjsKCWludCBjbnQgPSAwOwoJaW50IHByZXYgPSAtMTsKCWZvcihhdXRvIHg6IHRvdGFsKXsKCQlpZihjb3VudFt4XSAlIDIgIT0gMCAmJiB4ICE9IHByZXYpewoJCQljbnQrKzsKCQl9CgkJcHJldiA9IHg7Cgl9CgkvL2NvdXQ8PCJcblxuY250ID0gIjw8Y250OwoJaWYoY250ICUgMiAhPSAwKQoJCXJldHVybiAiTk8iOwoKCWZvcihhdXRvIHg6IHRvdGFsKXsKCQlpZihjb3VudFt4XSAlIDIgIT0gMCAmJiBjb3VudFt4XSAhPSAxKXsKCQkJQi5pbnNlcnQoeCk7CgkJCWNvdW50W3hdLS07CgkJCXN0ciArPSAnQic7CgkJfQoJCWVsc2UgaWYoY291bnRbeF0gJSAyICE9IDAgJiYgY291bnRbeF0gPT0gMSl7CgkJCUIuaW5zZXJ0KHgpOwoJCQlzdHIgKz0gJ0InOwoJCX0KCQllbHNlewoJCQlBLmluc2VydCh4KTsKCQkJc3RyICs9ICdBJzsKCQl9Cgl9CglpbnQgaSA9IDE7CgoJaW50IGl0ID0gMDsKCWZvcihhdXRvIHg6IEIpewoJCWlmKGkgPiBjbnQvIDIpCgkJCWJyZWFrOwoJCWlmKGNvdW50W3hdID09IDEpewoJCQlBLmluc2VydCh4KTsKCQkJQi5lcmFzZSh4KTsKCQkJaSsrOwoJCQlzdHJbaXRdID0gJ0EnOwoJCX0KCQlpdCsrOwoJfQoJCglyZXR1cm4gIllFUyI7Cn0KCmludCBtYWluKCl7CgoJaW50IG47CgoJY2luPj5uOwoKCW11bHRpc2V0PGludD4gdG90YWw7CglpbnQgeDsKCglmb3IoaW50IGk9MDsgaTxuOyBpKyspewoJCWNpbj4+eDsKCQl0b3RhbC5pbnNlcnQoeCk7Cgl9CglzdHJpbmcgYW5zID0gdmFzeWFfYW5kX211bHRpc2V0cyh0b3RhbCk7CglpZihhbnMgPT0gIk5PIikKCQljb3V0PDwiTk9cbiI7CgllbHNlIHsKCQljb3V0PDwiWUVTXG4iPDxzdHI8PCJcbiI7Cgl9CgoJcmV0dXJuIDA7Cn0K