#include <bits/stdc++.h>
using namespace std;
int now[27],a[27],b[27],c[27],d[27],b0,c0,a0;
int op;
char h[100],l[100],r[100];
int first,t[27];
void find(){
first=0;
for(int i=1;i<=b0;i++){
first=max(first,t[b[i]]);
}
return;
}
int main(){
int n;
scanf("%d\n",&n);
for(int i=1;i<=n;i++){
char ch;
ch=getchar();
d[i]=ch-'a'+1;
t[ch-'a'+1]=i;
now[i]=1;
a[i]=i;
}
a0=n;
b0=0;
c0=0;
for(int i=n;i>=1;i--){
switch (now[d[i]]){
case 1:{
while(a[a0]!=d[i]){
if(t[a[a0]]>first){
h[++op]=a[a0]+'a'-1;
l[op]='A';
r[op]='B';
first=t[a[a0]];
now[a[a0]]=2;
b[++b0]=a[a0--];
}
else{
h[++op]=a[a0]+'a'-1;
l[op]='A';
r[op]='C';
now[a[a0]]=3;
c[++c0]=a[a0--];
}
}
h[++op]=d[i]+'a'-1;
l[op]='A';
r[op]='D';
a0--;
break;
}
case 2:{
while(b[b0]!=d[i]){
h[++op]=b[b0]+'a'-1;
l[op]='B';
r[op]='C';
now[b[b0]]=3;
c[++c0]=b[b0--];
find();
}
h[++op]=d[i]+'a'-1;
l[op]='B';
r[op]='D';
b0--;
find();
break;
}
case 3:{
if(c[c0]!=d[i]){
printf("NO");
return 0;
}
else{
h[++op]=d[i]+'a'-1;
l[op]='C';
r[op]='D';
c0--;
}
break;
}
}
}
for(int i=1;i<=op;i++){
printf("%c %c %c\n",h[i],l[i],r[i]);
}
return 0;
}