#include <bits/stdc++.h>
using namespace std;
map<long long, long long> vis;
long long x, y;
bool bfs() {
  queue<pair<long long, int> > Q;
  Q.push(make_pair(x, -1));
  while (Q.size()) {
    pair<long long, int> cur = Q.front();
    Q.pop();
    if (cur.first > y) continue;
    vis[cur.first] = cur.second;
    if (cur.first == y) return 1;
    Q.push(make_pair(2 * cur.first, cur.first));
    Q.push(make_pair(10 * cur.first + 1, cur.first));
  }
  return 0;
}
int main() {
  cin >> x >> y;
  bool flag = bfs();
  if (!flag) {
    puts("NO");
    return 0;
  }
  puts("YES");
  vector<int> V;
  while (y != -1) {
    V.push_back(y);
    y = vis[y];
  }
  reverse(V.begin(), V.end());
  cout << V.size() << endl;
  for (int i = 0; i < V.size(); i++) cout << V[i] << ' ';
  return 0;
}
