#include <bits/stdc++.h>
using namespace std;
map<int, int> vis;
map<int, int> father;
int a, b;
int BFS() {
  int cur, pre, i;
  queue<int> q;
  int cnt = 1;
  q.push(b);
  vis[b] = 1;
  while (!q.empty()) {
    pre = q.front();
    if (cnt >= 1200000) return -1;
    if (pre < a) {
      q.pop();
    }
    for (i = 0; i < 2; i++) {
      if (i == 1) {
        if (pre % 2 == 0)
          cur = pre / 2;
        else
          break;
      } else {
        if ((pre - 1) % 10 == 0)
          cur = (pre - 1) / 10;
        else
          continue;
      }
      if (vis.find(cur) == vis.end() && cur <= b) {
        q.push(cur);
        cnt++;
        vis[cur] = vis[pre] + 1;
        father[cur] = pre;
        if (cur == a) return vis[cur];
      }
    }
    q.pop();
  }
  return -1;
}
void path(int a) {
  int cur;
  cur = father[a];
  if (cur == b) {
    return;
  }
  printf(" %d", father[a]);
  path(cur);
}
int main() {
  int ans;
  while (cin >> a >> b) {
    vis.clear();
    father.clear();
    ans = BFS();
    if (a == b) {
      printf("YES\n");
      printf("1\n");
      printf("%d\n", a);
    } else {
      if (ans == -1)
        printf("NO\n");
      else {
        printf("YES\n");
        printf("%d\n", ans);
        printf("%d", a);
        path(a);
        printf(" %d\n", b);
      }
    }
  }
  return 0;
}
