DFS
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
int vis[12],flag;
int cmp(const void *a,const void *b)
{ return *(char *)b-*(char *)a;}
int mult(char *ans)
{
int nu=0,x=1,sign=1;
for(int i=0;i<5;i++)
{
for(int j=1;j<=i+1;j++)
x*=(ans[i]-'A'+1);
nu+=x*sign;
sign*=(-1),x=1;
}
return nu;
}
void dfs(char *s,int t,char *ans,int depth,int len)
{
if(depth==5)
{
if(mult(ans)==t)flag=1;
return;
}
for(int i=0;i<len;i++)
if(!vis[i])
{
ans[depth]=s[i];
vis[i]=1;
dfs(s,t,ans,depth+1,len);
if(flag)return;
vis[i]=0;
}
}
main()
{
char str[13],ans[6];
int target;
while(scanf("%d %s",&target,str)!=EOF&&!(target==0&&(strcmp(str,"END")==0)))
{
memset(vis,0,sizeof(vis));
qsort(str,strlen(str),sizeof(char),cmp);
flag=0;
dfs(str,target,ans,0,strlen(str));
if(flag)ans[5]='\0',puts(ans);
else puts("no solution");
}
return 0;
}