#include <iostream>
#include <cstdio>#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
using namespace std;
const int N = 1000000;
const int inf = 0x3f3f3f3f;
typedef long long LL;
LL a[N], b[100];
LL head, tail, k, j;
LL n, m;
bool bfs(int n, int m)
{
head = 0, tail = 1;
a[0] = n;
while(head<tail)
{
if(a[head]==m)
return true;
if(a[head]*2<=m)
{
a[tail++] = a[head]*2;
}
if(a[head]*10+1<=m)
{
a[tail++] = a[head]*10+1;
}
head++;
}
return false;
}
bool dfs(int cur)
{
if(a[cur]==n)
return true;
for(int i = cur; i>=0; i--)
{
if(a[cur]/2==a[i]&&a[cur]%2==0)
{
if(dfs(i))
{
k++;
b[j++] = a[i];
}
}
if((a[cur]-1)/10==a[i]&&(a[cur]-1)%10==0)
{
if(dfs(i))
{
k++;
b[j++] = a[i];
}
}
}
return true;
}
int main()
{
while(~scanf("%I64d %I64d", &n, &m))//cf不支持lld,还好有警告,因为long long的问题re了4次。
{
if(bfs(n, m))
{
printf("YES\n");
k = 0, j = 0;
dfs(head);
printf("%lld\n", k+1);
for(int i = 0; i<j;i++)
printf("%lld ", b[i]);
printf("%lld\n", m);
}
else
printf("NO\n");
}
return 0;
}