#include<stdio.h>
#include<string.h>
int hash1[10]={0};
int hash2[10]={0};
int jud(char a[],int len)
{
if(a[0]>='5'&&a[0]<='9')
{
return 0; //false代表不合格的进位大整数;
}
if(a[0]=='0'&&len!=1)
{
return 2;
}
if(a[0]=='0'&&len==1)
{
return 1;
}
if(a[0]>='1'&&a[0]<'5')
{
return 1;
}
}
int main()
{
char a[25];
int inta[25],i,len,temp;
gets(a);
len=strlen(a);
/*将字符串数组转化为对应整数,存入变换的整数数组中*/
for(i=0;i<len;i++)
{
inta[i]=a[i]-'0';
hash1[inta[i]]++;
}
/*/检测输出
for(i=0;i<len;i++)
{
printf("%d",inta[i]);
}
*/
//检测变化数组内容的数字出现次数;
/**/
// printf("\n");
// for(i=0;i<10;i++)
// {
// printf("%d ",hash1[i]);
// }
/**/
// printf("\n");
int count=0;
for(i=len-1;i>0;i--)
{
temp=inta[i]*2+count;
if(temp>=10)
{
count=1;
}
else{
count=0;
}
inta[i]=temp%10;
}
inta[0]=inta[0]*2+count;
//将变换数组*2
//判断数组
if( jud(a,len)==1)
{
//对*2后的数组中数字出现的次数进行统计;
for(i=0;i<len;i++)
{
hash2[inta[i]]++;
}
// for(i=0;i<10;i++)
// {
// printf("%d ",hash2[i]);
// }
//比较两hash表是否完全相等
for(i=0;i<10;i++)
{
if(hash1[i]!=hash2[i])
{
printf("No\n");
for(i=0;i<len;i++)
{
printf("%d",inta[i]);
}
return 0;
}
}
printf("Yes\n");
for(i=0;i<len;i++)
{
printf("%d",inta[i]);
}
}
else if(jud(a,len)==2)
{
printf("No\n");
for(i=0;i<len;i++)
{
printf("%d",inta[i]);
}
}
else
{
printf("No\n");
for(i=0;i<len;i++)
{
printf("%d",inta[i]);
}
}
return 0;
}