#include <bits/stdc++.h>
using namespace std;
map<long long, long long> mp;
void print(long long x) {
  vector<long long> path;
  while (x) {
    path.push_back(x);
    x = mp[x];
  }
  printf("YES\n");
  printf("%lld\n", (long long)path.size());
  reverse(path.begin(), path.end());
  for (long long i = 0; i < (long long)path.size(); i++)
    printf("%lld ", path[i]);
}
void dfs(long long a, long long b) {
  stack<long long> st;
  st.push(a);
  while (!st.empty()) {
    long long z = st.top();
    long long x = 2 * z;
    long long y = z * 10 + 1;
    mp[x] = z;
    mp[y] = z;
    st.pop();
    if (x == b) {
      print(x);
      return;
    } else if (y == b) {
      print(y);
      return;
    }
    if (x < b) st.push(x);
    if (y < b) st.push(y);
  }
  printf("NO\n");
}
int main() {
  long long a, b, i, j, m, n, x, y;
  scanf("%lld %lld", &a, &b);
  dfs(a, b);
  return 0;
}
