#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:256000000")
using namespace std;
const string LN = "\n";
const double eps = 1e-9;
const double pi = acos(-1.0);
const int INF = (int)2e9 + 7;
const long long LINF = (long long)9e18 + 7;
const long long P = 353251;
const long long P1 = 239017;
const long long P2 = 239017;
const long long MOD = 1e9 + 7;
const long long MOD2 = 1e9 + 9;
long long a, b;
vector<long long> ans;
set<long long> was;
bool go(long long k) {
  if (k > b) return 0;
  if (was.find(k) != was.end()) return 0;
  if (k == b) return 1;
  if (go(k * (long long)2)) {
    ans.push_back(k * (long long)2);
    return 1;
  } else {
    if (go(k * (long long)10 + 1)) {
      ans.push_back(k * (long long)10 + 1);
      return 1;
    }
  }
  was.insert(k);
  return 0;
}
const bool is_testing = 0;
int main() {
  srand('D' + 'E' + 'N' + 'I' + 'S' + 'S' + 'O' + 'N');
  if (is_testing) {
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
  } else {
  }
  cin >> a >> b;
  if (go(a)) {
    ans.push_back(a);
    cout << "YES" << LN << ans.size() << LN;
    reverse(ans.begin(), ans.end());
    for (int x : ans) cout << x << ' ';
  } else {
    cout << "NO";
  }
}
