蒟蒻的自我拯救2.
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
char str[100];
char ans[10];
int top;
int n;
int len;
bool v[500];
int mypow(int a,int b)
{
int s=1;
for(int i=1;i<=b;i++)
s*=a;
return s;
}
bool dfs(int s,int k,int pos)
{
if(s==5)
{
if(k==n) {ans[top]='\0';return true;}
return false;
}
for(int i=len-1;i>=0;i--)
{
if(v[str[i]]) continue;
v[str[i]]=true;
ans[top++]=str[i];
if(dfs(s+1,k+mypow(str[i]-'A'+1,s+1)*(s%2?-1:1),i+1)) return true;
top--;
v[str[i]]=false;
}
return false;
}
int main()
{
while(scanf("%d %s",&n,str)!=-1)
{
memset(v,0,sizeof(v));
if(n==0&&strcmp(str,"END")==0) break;
len=strlen(str);
sort(str,str+len);
top=0;
if(dfs(0,0,0)) puts(ans);
else puts("no solution");
}
return 0;
}