深搜水过
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int target,num;
char letter[15];
int vis[15];
char password[15];
int len;
bool cmp(char a,char b){
return (int)a>(int)b;
}
int add(char *pw){
int sum=0;
for(int i=0;i<5;i++){
int a=pw[i]-'A'+1;
switch(i){
case 0:sum+=a;break;
case 1:sum+=-a*a;break;
case 2:sum+=a*a*a;break;
case 3:sum+=-a*a*a*a;break;
case 4:sum+=a*a*a*a*a;break;
}
}
return sum;
}
bool dfs(int len){
int i;
if(len==5&&add(password)==target) return true;
if(len<5){
for(i=0;i<num;i++) if(!vis[i]){
password[len]=letter[i];
vis[i]=1;
if(dfs(len+1)) return true;
vis[i]=0;
}
}
return false;
}
int main(){
while(scanf("%d %s",&target,letter)){
if(target==0&&!strcmp(letter,"END")) break;
num=strlen(letter);
sort(letter,letter+num,cmp);
memset(vis,0,sizeof(vis));
len=0;
if(dfs(len)) printf("%s\n",password);
else printf("no solution\n");
}
return 0;
}