1015
/* hdu 1015 */
#include <stdio.h>
int cto(char c)/* 将大写字符转换为数字 A65 */
{
return c-64;
}
int len(char *l)/* 统计字符个数 0~n-1 */
{
int n;
for (n=0;l[n]!='\0';++n)
;
return n;
}
int fact(int a,int n)/* 计算a^n */
{
int i,s;
for (i=1,s=1;i<=n;++i)
s*=a;
return s;
}
int calculate(char *s)/* 计算target */
{
int i,t;
for (i=0,t=0;i<5;++i)
t+=fact(-1,i)*fact(cto(s[i]),i+1);
return t;
}
void csort(char *l,int n)/* 对字符数组递增排序 */
{
char c;
int i,j;
for (i=0;i<n;++i)
{
for (j=i+1;j<n;++j)
{
if (l[i]>l[j])
{
c=l[i];
l[i]=l[j];
l[j]=c;
}
}
}
}
void fun(char *l,int n,int t)/* 穷举排列A(n,5) */
{
int i0,i1,i2,i3,i4;
char s[5];
for (i0=n-1;i0>=0;--i0)
{
s[0]=l[i0];
for (i1=n-1;i1>=0;--i1)
{
if (i1==i0)
continue;
s[1]=l[i1];
for (i2=n-1;i2>=0;--i2)
{
if (i2==i1 || i2==i0)
continue;
s[2]=l[i2];
for (i3=n-1;i3>=0;--i3)
{
if (i3==i2 || i3==i1 || i3==i0)
continue;
s[3]=l[i3];
for (i4=n-1;i4>=0;--i4)
{
if (i4==i3 || i4==i2 || i4==i1 || i4==i0)
continue;
s[4]=l[i4];
if (t==calculate(s))
{
printf("%s\n",s);
return ;
}
}
}
}
}
}
printf("no solution\n");
}
int main()
{
int n,t;
char l[20];
while (scanf("%d %s",&t,l)!=EOF)
{
n=len(l);
if (0==t && 3==n)
break;
csort(l,n);
fun(l,n,t);
}
return 0;
}