//题意自己看,不会度娘
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char a[15];
char b[15];
int n,num,len;
int visit[15];
bool mmp=false;
bool cmp(char a,char b)//char,不是int
{
return a>b;
}//排序
void init()//存数字
{
len=strlen(a);//求长度
mmp=false;
memset(visit,0,sizeof(visit));
sort(a,a+len,cmp);
for(int i=0;i<len;++i)
{
a[i]=a[i]-'A'+1;//a[i]存数字
}
}
void zj()//数字重新变为字母
{
for(int i=0;i<5;++i)
b[i]=b[i]+'A'-1;
}
bool yuan()
{
if(n==b[0]-b[1]*b[1]+b[2]*b[2]*b[2]-b[3]*b[3]*b[3]*b[3]+b[4]*b[4]*b[4]*b[4]*b[4])
{
mmp=true;
return true;
}
else
return false;
}
void DFS(int sum)
{
if(mmp)
return ;//剪枝,如果这五个数字可行
if(sum==5)
{
yuan();//满五个数,检查是否符合题意
return ;
}
for(int i=0;i<len;++i)//数字循环
{
if(!mmp&&!visit[i])//如果没有被使用且 数字没有用过
{
b[sum]=a[i];//数次次数赋值
visit[i]=1;//标记
DFS(sum+1);
visit[i]=0;
}
}
}
int main(int argc, char *argv[])
{
while(scanf("%d %s",&n,a)!=EOF)
{
if(n==0&&!strcmp(a,"END"))
break;
init();
DFS(0);
zj();
if(mmp)//参数一定要弄对
printf("%s\n",b);
else
printf("no solution\n");
}
return 0;
}
//Start-ZJ
//2017/9/28/13:50