*吐槽:这是一道表面字符串,实际上是大数的加法加上一点点散列。
但是我觉得我还是把代码写得太复杂了。*

#include<cstdio>
#include<cstring>
int main(){
    char str[25];
    int  arr1[10];
    int  arr2[10];
    int  s[25];
    while(scanf("%s",str) != EOF){
        memset(arr1,0,sizeof(arr1));
        memset(arr2,0,sizeof(arr2));
        memset(s,0,sizeof(s));
        int len = strlen(str);
        int c=0,tmp,i;
        for(i=0;i<len;i++){
            tmp = str[len-1-i] - '0';
            arr1[tmp]++; 
            s[i] = (2*tmp + c) % 10;
            arr2[s[i]]++;
            c =(2*tmp + c) / 10;
        }
        if(c!=0){
            s[i]=c; 
            arr2[s[i]]++;
            i++;    
        } 
        int j;
        for(j=0;j<10;j++){
            if(arr1[j] != arr2[j]){
                 printf("No\n");
                 break;
            }      
        }
        if(j==10) printf("Yes\n");
        for(j=0;j<i;j++){
            printf("%d",s[i-1-j]);
        }
        printf("\n");   
    }
    return 0;
}