long?Re0(long?a);
int?Fact(int?a);
main()
{
long?array[1000];
char?str[1000][1000];
char?t[1000];
int?m?=?0;
int?k?=?0;
int?j;
long?p=0,chino,i,guess;
scanf("%ld",&chino);
for(i=1;i<=chino;i++)
{
guess=Re0(i);
if(guess==i)
{
array[k++]?=?i;
}
}
for(i?=?0;?i?<k?;i++)
{
sprintf(str[i],"%d",array[i]);
}
?for?(i?=?0;?i?<?k?-?1;?i++)?//將字符串排序
{
for?(j?=?0;?j?<?k?-?1?-?i;j++)
if?(strcmp(str[j],?str[j?+?1])?>?0)
{
strcpy(t,?str[j]);
strcpy(str[j],?str[j?+?1]);
strcpy(str[j+1],?t);
}
}
for?(i?=?0;?i?<?k;?i++)?//輸出
{
if(i?==?k-1)
printf("%s",str[i]);
else
printf("%s?",str[i]);
}
}
int?Fact(int?a)
{
if(a==0||a==1)
return?1;
else?if(a>1)
return?a*Fact(a-1);
}
long?Re0(long?a) //計算各個位數之和
{
long?sum;
int?A,B,C,D,E; //分別為個位、十位、百位、千位、萬位
if(a<10)
return?Fact(a);
else?if(a>=10&&a<100)
{
A=a%10;
B=a/10;
sum=Fact(A)+Fact(B);
return?sum;
}
else?if(a>=100&&a<1000)
{
A=a%10;
B=a%100/10;
C=a/100;
sum=Fact(A)+Fact(B)+Fact(C);
return?sum;
}
else?if(a>=1000&&a<10000)
{
A=a%10;
B=a%100/10;
C=a%1000/100;
D=a/1000;
sum=Fact(A)+Fact(B)+Fact(C)+Fact(D);
return?sum;
}
else?if(a>=10000&&a<100000)
{
A=a%10;
B=a%100/10;
C=a%1000/100;
D=a%10000/1000;
E=a/10000;
sum=Fact(A)+Fact(B)+Fact(C)+Fact(D)+Fact(E);
return?sum;
}
}