#include <bits/stdc++.h>
using namespace std;
const unsigned long long p = 31, ps = 41;
const unsigned long long mod = 1e9 + 9;
unsigned long long modulo_power(unsigned long long a, unsigned long long p,
                                unsigned long long mod) {
  unsigned long long pow = a, res = 1;
  while (p > 0) {
    if (p & 1) {
      res = (res * pow) % mod;
    }
    pow = (pow * pow) % mod;
    p = (p >> 1);
  }
  return res;
}
unsigned long long power(unsigned long long a, unsigned long long p) {
  return modulo_power(a, p, ULLONG_MAX);
}
unsigned long long gcd(unsigned long long a, unsigned long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
unsigned long long gcde(unsigned long long a, unsigned long long b,
                        long long &x, long long &y) {
  if (b == 0) {
    x = 1;
    y = 0;
    return a;
  }
  long long x1, y1;
  unsigned long long d = gcde(b, a % b, x1, y1);
  x = y1;
  y = x1 - y1 * (a / b);
  return d;
}
vector<long long> vis;
long long found = 0;
long long a, b;
void dfs(long long u) {
  if (u == b) {
    found = 1;
    vis.push_back(b);
    return;
  }
  if (2 * u <= b) {
    dfs(2 * u);
    if (found) {
      vis.push_back(u);
      return;
    }
  }
  if (10 * u + 1 <= b) {
    dfs(10 * u + 1);
    if (found) {
      vis.push_back(u);
      return;
    }
  }
}
void solve() {
  cin >> a >> b;
  dfs(a);
  if (found) {
    cout << "YES\n";
    cout << vis.size() << '\n';
    reverse(vis.begin(), vis.end());
    for (auto v : vis) {
      cout << v << " ";
    }
  } else
    cout << "NO";
}
int main() {
  unsigned long long t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
