#include <bits/stdc++.h>
using namespace std;
const int INF = 0x7f7f7f7f;
const double pi = acos(-1.0);
struct node {
  int re[40];
  int cnt;
  long long num;
} q[502001];
int head = 1, tail = 0;
int a, b;
bool flag = false;
map<int, char> vis;
void bfs(int st, int ed) {
  node now, o;
  now.cnt = 1;
  now.num = st;
  now.re[now.cnt] = now.num;
  q[++tail] = now;
  while (tail >= head) {
    now = q[head++];
    if (now.num > ed || vis[now.num]) continue;
    vis[now.num] = 1;
    if (now.num == ed) {
      flag = true;
      puts("YES");
      printf("%d\n", now.cnt);
      for (int i = 1; i <= now.cnt; i++) {
        printf("%d ", now.re[i]);
      }
    }
    if (tail > 500000 && head > 500000) tail %= 500000, head %= 500000;
    o = now;
    o.cnt++;
    o.num *= 2;
    o.re[o.cnt] = o.num;
    if (o.num <= ed) q[++tail] = o;
    o = now;
    o.cnt++;
    o.num = o.num * 10 + 1;
    o.re[o.cnt] = o.num;
    if (o.num <= ed) q[++tail] = o;
  }
}
int main() {
  scanf("%d %d", &a, &b);
  bfs(a, b);
  if (!flag) puts("NO");
  return 0;
}
