#include <bits/stdc++.h>
using namespace std;
map<long long, long long> pr;
map<long long, long long> vis;
long long a, b;
int bfs() {
  deque<long long> dq;
  dq.push_back(a);
  vis[a]++;
  int cnt = 0;
  while (!dq.empty()) {
    cnt++;
    if (cnt == 1e6) {
      cout << 1 << "\n";
      return 0;
    }
    int nd = dq.front();
    dq.pop_front();
    if (nd == b) {
      return nd;
    }
    long long L = (long long)nd * 2;
    long long R = (long long)nd * 10 + 1;
    if (vis.find(L) == vis.end() && L > 0 && L < 2 * 1e9) {
      pr[L] = nd;
      dq.push_back(L);
      vis[L]++;
    }
    if (vis.find(R) == vis.end() && R > 0 && R < 2 * 1e9) {
      pr[R] = nd;
      dq.push_back(R);
      vis[R]++;
    }
  }
  return 0;
}
deque<int> ans;
void per(long long bb) {
  if (bb == a) {
    ans.push_front(a);
    return;
  }
  per(pr[bb]);
  ans.push_back(bb);
}
int main() {
  cin >> a >> b;
  long long bf = bfs();
  if (bf == 0) {
    cout << "NO\n";
    return 0;
  }
  cout << "YES\n";
  per(bf);
  cout << ans.size() << "\n";
  for (int i = 0; i < ans.size(); i++) cout << ans[i] << " ";
  return 0;
}
