#define _CRT_SECURE_NO_WARNINGS
#include<string>
#include<string.h>
#include<vector>
#include<map>
#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
int main()
{
char number[22];
string result("");
cin >> number;
int mark = 0;
int i = 0;
while (number[i] != '\0')
i++;
int num_size = i;
for (i = num_size - 1; i >= 0; i--)
{
int tmp = number[i]-'0';
tmp *= 2;
tmp += mark;
if (tmp > 9)
{
tmp = tmp % 10;
mark = 1;
}
else
{
mark = 0;
}
char dig[2] = {0};
sprintf(dig, "%d", tmp);
result = dig[0] + result;
}
if (mark == 1)
{
result = "1" + result;
cout << "No\n" << result.c_str();
return 0;
}
bool find = true;
string sout = result;
for (int i = 0; i < num_size; i++)
{
int pos = result.find(number[i]);
if (pos<0 || pos>result.size() + 1)
{
find = false;
break;
}
result = result.substr(0, pos) + result.substr(pos+1);
}
if (!find)
cout << "No\n";
else
cout << "Yes\n";
cout << sout.c_str();
return 0;
}
#include<string>
#include<string.h>
#include<vector>
#include<map>
#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
int main()
{
char number[22];
string result("");
cin >> number;
int mark = 0;
int i = 0;
while (number[i] != '\0')
i++;
int num_size = i;
for (i = num_size - 1; i >= 0; i--)
{
int tmp = number[i]-'0';
tmp *= 2;
tmp += mark;
if (tmp > 9)
{
tmp = tmp % 10;
mark = 1;
}
else
{
mark = 0;
}
char dig[2] = {0};
sprintf(dig, "%d", tmp);
result = dig[0] + result;
}
if (mark == 1)
{
result = "1" + result;
cout << "No\n" << result.c_str();
return 0;
}
bool find = true;
string sout = result;
for (int i = 0; i < num_size; i++)
{
int pos = result.find(number[i]);
if (pos<0 || pos>result.size() + 1)
{
find = false;
break;
}
result = result.substr(0, pos) + result.substr(pos+1);
}
if (!find)
cout << "No\n";
else
cout << "Yes\n";
cout << sout.c_str();
return 0;
}