#include <bits/stdc++.h>
using namespace std;
struct node {
  long long x;
  int fa;
  node() {}
  node(long long x, int fa) : x(x), fa(fa) {}
} q[1000010];
int main() {
  long long a, b;
  while (~scanf("%I64d%I64d", &a, &b)) {
    bool f = false;
    q[1] = node(a, -1);
    int head = 1;
    int tail = 1;
    while (head <= tail) {
      node tmp = q[head];
      if (tmp.x == b) {
        f = true;
        break;
      }
      if (tmp.x * 2 <= b) q[++tail] = node(tmp.x * 2, head);
      if (tmp.x * 10 + 1 <= b) q[++tail] = node(tmp.x * 10 + 1, head);
      head++;
    }
    stack<long long> s;
    if (f) {
      printf("YES\n");
      while (head >= 1) {
        s.push(q[head].x);
        head = q[head].fa;
      }
      printf("%d\n", s.size());
      while (!s.empty()) {
        printf("%I64d ", s.top());
        s.pop();
      }
      printf("\n");
    } else {
      printf("NO\n");
    }
  }
  return 0;
}
