#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
struct r{
string s;
int res;
};
bool comp(r r1, r r2){
return r1.s<r2.s;
}
int lToI(char c){
return c-'A'+1;
}
struct letters{int v,w,x,y,z;};
bool isRight(letters l, int target){
return (l.v-
l.w*l.w+
l.x*l.x*l.x-
l.y*l.y*l.y*l.y+
l.z*l.z*l.z*l.z*l.z)==target;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
int n,len;
char str[13];
char *s1, *s2, *s3, *s4, *s5;
vector<r> res;
vector<r>::iterator ii;
begin:
while(scanf("%d", &n), n){
scanf("%s", str);
len = strlen(str);
for(s1=str;s1<str+len;s1++)
for(s2=str;s2<str+len;s2++)
for(s3=str;s3<str+len;s3++)
for(s4=str;s4<str+len;s4++)
for(s5=str;s5<str+len;s5++){
letters l;
l.v=lToI(*s1);
l.w=lToI(*s2);
l.x=lToI(*s3);
l.y=lToI(*s4);
l.z=lToI(*s5);
if(isRight(l, n)){
if(s1==s2||s1==s3||s1==s4||s1==s5||
s2==s3||s2==s4||s2==s5||
s3==s4||s3==s5||
s4==s5)
continue;
r r1;
r1.res=l.v+l.w+l.x+l.y+l.z;
r1.s.push_back(*s1);
r1.s.push_back(*s2);
r1.s.push_back(*s3);
r1.s.push_back(*s4);
r1.s.push_back(*s5);
res.push_back(r1);
}
}
if(!res.empty()){
ii=max_element(res.begin(),res.end(), comp);
printf("%c%c%c%c%c\n", (*ii).s.at(0), (*ii).s.at(1),(*ii).s.at(2),(*ii).s.at(3),(*ii).s.at(4));
}else{
printf("no solution\n");
}
res.clear();
}
#ifndef ONLINE_JUDGE
fclose(stdin);
fclose(stdout);
#endif
}