#include <bits/stdc++.h>
using namespace std;
int Set(int n, int pos) { return n = n | (1 << pos); }
int reset(int n, int pos) { return n = n & ~(1 << pos); }
bool check(int n, int pos) { return (bool)(n & (1 << pos)); }
long long a, b;
map<long long, long long> par;
bool f = 0;
void dfs(long long s) {
  long long t1 = 2 * s;
  long long t2 = 10 * s + 1;
  if (t1 == b) {
    par[b] = s;
    f = 1;
    return;
  } else if (t1 < b) {
    par[t1] = s;
    dfs(t1);
  } else if (t1 > b)
    return;
  if (t2 == b) {
    par[b] = s;
    f = 1;
    return;
  } else if (t2 < b) {
    par[t2] = s;
    dfs(t2);
  } else if (t2 > b)
    return;
}
int main() {
  int t = 1;
  while (t--) {
    cin >> a >> b;
    f = 0;
    par.clear();
    dfs(a);
    if (f == 0) {
      printf("NO\n");
    } else {
      long long tt = b;
      int ct = 2;
      vector<long long> v;
      v.clear();
      v.push_back(b);
      while (par[tt] != a) {
        ct++;
        tt = par[tt];
        v.push_back(tt);
      }
      v.push_back(a);
      reverse(v.begin(), v.end());
      printf("YES\n%d\n", ct);
      for (int i = 0; i < v.size(); i++) {
        printf("%lld ", v[i]);
      }
      printf("\n");
    }
  }
  return (0);
}
